动态代理 JDK动态代理为什么必须针对接口?其与CGLIB的对比 Cglib动态代理实现原理

JDK动态代理为什么必须针对接口?其与CGLIB的对比

纯手写实现JDK动态代理

Cglib动态代理实现原理

动态代理的实现与案例

JDK动态代理和Gglib动态代理的区别:
1.JDK动态代理是实现了被代理对象的接口,Cglib是继承了被代理对象。
2.JDK和Cglib都是在运行期生成字节码,JDK是直接写Class字节码,Cglib使用ASM框架写Class字节码,Cglib代理实现更复杂,生成代理类比JDK效率低。
3.JDK调用代理方法,是通过反射机制调用,Cglib是通过FastClass机制直接调用方法,Cglib执行效率更高。
4.
JDK动态代理的原理是根据定义好的规则,用传入的接口创建一个新类,这就是为什么采用动态代理时为什么只能用接口引用指向代理,而不能用传入的类引用执行动态类。cglib采用的是用创建一个继承实现类的子类,用asm库动态修改子类的代码来实现的,所以可以用传入的类引用执行代理类
 
 

猜你喜欢

转载自www.cnblogs.com/thiaoqueen/p/9202360.html
今日推荐