Java动态代理

Posted by 杨一 on 2020-06-11

Jdk 动态代理

动态代理:是使用反射和字节码的技术,在运行期创建指定接口或类的子类(动态代理)以及其实例对象的技术,通过这个技术可以无侵入性的为代码进行增强;
Java源文件(.java) -> Java字节码(.class) -> Class对象 -> 实例对象
动态代理(内存生成) -> Java字节码(.class) -> Class对象 -> 实例对象

Cglib 代理

cGLIB( Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进
行修改和动态生成。CGLB通过继承方式实现代理;
Enhancer:来指定要代理的目标对象、实际处理代理逻辑的对象,最终通过调用 create0方法得到
代理对象,对这个对象所有非fna方法的调用都会转发给 MethodInterceptor;
MethodInterceptor:动态代理对象的方法调用都会转发到 Intercept方法进行增强;


JDK原生动态代理是Java原生支持的,不需要任何外部依赖,但是它只能基于接口进行代理;

CGLB通过继承的方式进行代理,无论目标对象有没有实现接口都可以代理,但是无法处理fina的情况。