动态代理的案例
定义一个接口:
定义一个接口的实现类:
定义一个动态代理的实现类:
目标对象一般通过构造方法注入
测试案例:
分析动态代理生成的实现类
设置输出动态代理生成的字节码
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles","true");
通过上述发现,动态生成的类继承了Proxy类,实现了Subject接口,并且覆盖了Object类的 equals()、toString()、hashCode()
以及Subject的request方法
此处调用的subject的request方法实际上是调用的是 $Proxy0的request方法,最终都是执行的InvocationHandle的request方法
Jdk动态代理的源码分析
此处的 c1为获取的代理的字节码对象
最终调用其构造方法传入h返回代理对象
\最终都会执行Proxy的下属对象的apply方法
通过此处发现同事设置 saveGeneratedFiles 来判断是否需要打印字节码类类
网友评论