JDK方式实现简单动态代理

93 阅读1分钟
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;

/**
 * Dynamic proxy
 */
public class TestHandle implements InvocationHandler {
    Object target;

    private void setTarget(Object target){
        this.target = target;
    }

    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(),this);
    }

    @Override
    public Object invoke(Object o, Method method, Object[] args) throws Throwable {
        System.out.println(method.getName() + "开始");
        Object result = method.invoke(target,args);
        System.out.println(method.getName() + "结束。。。");
        return result;
    }

    public static void main(String[] args) {
        TestHandle testHandle = new TestHandle();
        testHandle.setTarget(new ArrayList<String>());
        List list = (List) testHandle.getProxy();
        list.add("kjkhkghkj");
        System.out.println(list.toString());
    }
}