其他分享
首页 > 其他分享> > 动态代理实现

动态代理实现

作者:互联网

package pattern;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicPattern {
    public static void main(String[] args) throws Throwable {
        DynamicTest dynamicTest = new DynamicTest(new TChildren());
       // T t = (T) Proxy.newProxyInstance(DynamicTest.class.getClassLoader(), new Class[]{T.class},dynamicTest);
//        t.test();//这里是获取被代理的对象
        dynamicTest.invoke(T.class,T.class.getMethod("test"),null);//这里才是通过动态代理对象去调用方法。传参、被代理的对象和对应的方法,第三个参数是方法的参数
    }
}

class DynamicTest implements InvocationHandler {

    Object target;

    public DynamicTest(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("执行代理前的方法");
        System.out.println("执行代理方法"+method.getName());
        System.out.println(method);
        Object invoke = method.invoke(target,args);
        System.out.println("执行代理后的方法");
        return invoke;
    }
}

interface T{
    void test();
}

class TChildren implements T{

    @Override
    public void test() {
        System.out.println("要被代理的方法执行了-----------");
    }
}

 

标签:invoke,实现,Object,System,代理,public,动态,class,out
来源: https://www.cnblogs.com/thh19201420/p/16457148.html