|
|
jdk
动态代理实例
- 服务接口
|
|
- 接口实现类
|
|
- 调用处理类
|
|
- 运行测试
|
|
结果:
|
|
Proxy.newProxyInstance
分析
|
|
- 生成代理类
Class
|
|
- 代理类
Class
工厂
|
|
反编译代理类
- 修改测试
HelloProxyTest
|
|
注意,当把saveGeneratedFiles
属性设置为true时,生成的class文件及其所在的路径都需要提前创建,否则会抛出FileNotFoundException异常;即要在运行当前main方法的路径下创建com/sun/proxy目录,并创建一个$Proxy0.class文件
- 反编译文件
$Proxy0.class
|
|
显而易见,动态生成的代理类有如下特性:
- 继承了Proxy类,实现了代理的接口,由于java不能多继承,这里已经继承了Proxy类了,不能再继承其他的类,所以JDK的动态代理不支持对实现类的代理,只支持接口的代理。
- 代理类实现代理接口的
say
方法中,只是简单的调用了InvocationHandler
的invoke
方法,我们可以在invoke
方法中进行一些特殊操作,甚至不调用实现的方法,直接返回。