动态代理实现
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("要被代理的方法执行了-----------"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~