JAVA 동적 프록시 모드(현실생활에서 코드 원리 이해)

이른바 동적 에이전트, 즉 에이전트 클래스: Proxy의 에이전트를 통해 인터페이스와 실현 클래스 간에 직접적인 관계가 발생하지 않고 운행 기간(Runtime)에 동적 관련을 실현할 수 있다.
자바 동적 에이전트는 주로 자바를 사용합니다.lang.reflect 패키지의 두 종류입니다.
InvocationHandler 클래스public Object invoke(Object obj,Method method,Object[] obs) 그 중에서 첫 번째 매개 변수obj는 프록시 클래스를 가리키고method는 프록시되는 방법,obs는 프록시되는 방법의 매개 변수 그룹을 가리킨다.이 방법은 대리류로 이루어진다.
Proxy 클래스

protectedProxy(InvocationHandler h);

staticClass getProxyClass(ClassLoader loader,Class[] interfaces);

staticObject newProxyInstance(ClassLoader loader,Class[]interfaces,InvocationHandlerh);
동적 에이전트는 실행할 때class를 생성합니다. 그러므로 우리는 인터페이스를 제공해야 합니다. 그리고class가 이러한 인터페이스를 실현했다고 알려야 합니다. 그리고proxy를 생성할 때handler를 제공해서 실제 업무를 인수하도록 해야 합니다.
마찬가지로 코드가 실현되기 전에 우리는 체인가에 대한 이야기를 해야 한다. 이전에 정적 대리 모델에서 체인가(인터페이스)는 중고 주택을 파는 업무가 있고 회사에는 대량의 주택 판매 엘리트(정적 대리)가 있다고 언급했지만 현재 인터넷 금융의 발전 추세가 매우 빠르다. 체인가도 끼어들고 싶지만 관련 인재(대리)의 비축이 없어서 고생한다.이때 회사는 관련 인재 시장(동적 대리'공장')에서 전문 인재를 찾아 이런 업무를 실현하겠다는 생각을 가지게 되었다. 인재 시장은 말 그대로 기업(인터페이스)의 특정한 수요(대리받는 방법)에 따라 관련 기능을 가진 인재를 찾는 것이다.다음은 동적 에이전트의 구현 코드를 시작합니다.
1단계: LianJia가 주택 매매 및 인터넷 대출 채널을 제공하는 방법(인터넷)

 interface LianJia {
   public void sellHouse();
   public void loan();
 }
두 번째 단계: 우리 집주인은 집을 팔 뿐만 아니라 대출을 받아 다른 일을 해야 한다(시장 수요) 체인가가 이 업무를 가지고 있다는 것을 알게 되어 체인가를 찾았다(대리 대상)

public class HouseMaster implements LianJia {
  @Override
  public void sellHouse() {
    System.out.println(" ");
  }
  @Override
  public void loan() {
    System.out.println(" ");
  }
}
세 번째 단계: 여기는 광범위한 인재 시장입니다. 당신이 원하는 여기는 모두 (동적 에이전트를 생성하는 종류)

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class CreatProxy implements InvocationHandler{
  // ( Object Java )
  private Object target;
  // ( )
  public Object bind(Object target){
    this.target = target;
    // Proxy 
    Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    return proxy;
  }
  // 
    /**
     * proxy:  
     * method: 
     * args: 
     */
  public Object invoke(Object proxy, Method method, Object[] args)
      throws Throwable {
    // 
    method.invoke(target);
    return null;
  }
}
4단계: 테스트 클래스 구현

public class Test {
  public static void main(String[] args) {
    HouseMaster hm = new HouseMaster();
    CreatProxy cp = new CreatProxy();
    LianJia lj = (LianJia) cp.bind(hm);
    lj.sellHouse();
    lj.loan();
  }
}
우리도 정적 에이전트에서 동적 에이전트까지 전체 과정에서 피에이전트 대상(시장 수요)이 수시로 변화하고 기업(인터페이스)도 동적 에이전트 모델을 사용해야 시장 변화에 대응할 수 있다는 것을 발견했다(개인적으로 후지캉은 큰 전자류 동적 에이전트 공장에 속하고 애플 구글 등 기업은 시장 수요의 창시자와 규칙(인터페이스)을 위한 것이다.
이상은 본문의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있는 동시에 저희를 많이 지지해 주시기 바랍니다!

좋은 웹페이지 즐겨찾기