动态代理实现

复制代码
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("要被代理的方法执行了-----------");
    }
}
复制代码

 

posted @   大大怪下士  阅读(25)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示