https://blog.csdn.net/weixin_41980692/article/details/105851751
使用场景:JDK 动态代理只能代理实现了接口的类。CGLIB 是针对类实现代理,主要是对指定的类生成一个子类
原理:JDK 动态代理是通过反射。CGLIB 原理是动态生成被代理类的子类。CGLIB 底层采用 ASM 字节码生成框架,使用字节码技术生成代理类
速度:动态代理快于 CGLIB
https://xmind.ai/share/Mq2OLP1A?xid=xBkxtcZe
Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。
JDK 动态代理只能对实现了接口的类生成代理,而不是针对类。
JDK 动态代理主要涉及到 java.lang.reflect 包中的两个类:Proxy 和 InvocationHandler。
InvocationHandler 是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编制在一起。
Proxy 利用 InvocationHandler 动态创建一个符合某一接口的实例,生成目标类的代理对象。
CGLIB 是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)CGLib 全称 CodeGeneration Library,是一个强大的高性能,高质量的代码生成类库,可以在运行期扩展 Java 类与实现 Java 接口,CGLib 封装了 asm,可以在运行期动态生成新 class。
CGLIB 和 JDK 动态代理相比较: