firemail
标题:
java代理
[打印本页]
作者:
java
时间:
2019-5-9 11:20
标题:
java代理
生成的代理类:$Proxy0 extends Proxy implements Person,我们看到代理类继承了Proxy类,所以也就决定了java动态代理只能对接口进行代理,Java的继承机制注定了这些动态代理类们无法实现对class的动态代理。
上面的动态代理的例子,其实就是AOP的一个简单实现了,在目标对象的方法执行之前和执行之后进行了处理,对方法耗时统计。Spring的AOP实现其实也是用了Proxy和InvocationHandler这两个东西的。
Java中两种常见的动态代理方式:
JDK原生动态代理和CGLIB动态代理
。
代理对象是在程序运行时产生的,而不是编译期;
对代理对象的所有接口方法调用都会转发到InvocationHandler.invoke()方法
,在invoke()方法里我们可以加入任何逻辑,比如修改方法参数,加入日志功能、安全检查功能等
CGLIB
(
Code Generation Library
)是一个基于
ASM
的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。CGLIB通过继承方式实现代理
欢迎光临 firemail (http://firemail.wang:8088/)
Powered by Discuz! X3