자바 의 동적 에이전트 간단 한 이해

2240 단어 Java
첫 번 째 부분 main 함수 부분 은 이 부분 을 보고 전체 프로그램의 실행 방향 을 이해 합 니 다.
package com.test.DynamicProxy;

import java.lang.reflect.Proxy;

/**
 *           :       (Faker)   (classLoader interfaces[])        (Proxy)   (proxy),
 *              (Faker)                   (     Faker class               ),
 *       "             (   )"  "             (  RPC)",          palyInvoke           
 *    proxy   Proxy.newProxyInstance ,           InvocationHandler       (playInvoke,            faker)。
 *   ,proxy            playInvoke   (     、       ,        ,                   )。
 *
 */

public class Main {
    public static void main(String[] args) {
        PlayInvoke playInvoke = new PlayInvoke(new Faker());
        Person proxy = (Person)Proxy.newProxyInstance(Faker.class.getClassLoader(), Faker.class.getInterfaces(), playInvoke);
        proxy.playLOL();

        playInvoke.setObject(new MLXG());
        proxy.playLOL();
    }
}

인터페이스 에서 방법 을 정의 했다.
package com.test.DynamicProxy;

public interface Person {
    public void playLOL();
}

첫 번 째 실현 클래스: 이 방법 을 실 현 했 습 니 다. 출력 호출 정보 package. com. test. DynamicProxy;
public class MLXG implements Person {
    public void playLOL() {
        System.out.println("I like to gank!");
    }
}

두 번 째 실현 류
package com.test.DynamicProxy;

public class Faker implements Person {
    public void playLOL() {
        System.out.println("I play LOL best!");
    }
}

프 록 시 클래스 의 handler: 실제 실행 방법 패키지 com. test. DynamicProxy 를 반사 합 니 다.
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class PlayInvoke implements InvocationHandler {

    private Object object;

    public PlayInvoke(Object object) {
        this.object = object;
    }

    public void setObject(Object object) {
        this.object = object;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("   PlayInvoke     :");
        return method.invoke(object, args);
    }
}

참고 문서: 자바 의 동적 대 리 를 10 분 동안 이해 합 니 다.https://www.jianshu.com/p/cbd58642fc08

좋은 웹페이지 즐겨찾기