JDK动态代理 VS Cglib动态代理


Cglib不是更强么,为什么有了Cglib还要有JDK动态代理存在的必要?

  1. final Class 不支持, 因为CGLIB是生成子类来实现 AOP,所以final Class自然无法支持了.

JDK动态代理
优点

  1. JAVA自带,JDK原生的,到哪儿都能用。Cglib则需要额外的包来支持。
  2. 支持final类的代理,因为是基于接口的,跟被代理对象是不是final的没有关系。Cglib 不能代理final类,因为Cglib是基于继承来实现的,final类无法被继承,不然String这个类就可以被改来改去了。
    局限
  3. 一定要有接口,它是基于接口+反射实现的。Cglib不要接口,有个类就能代理。
  4. 速度慢,效率低,因为是基于反射的,所以效率不高。

Cglib动态代理
优点

  1. 不一定需要接口,只要不是final类,就能代理。
  2. 速度快,都这么说,因为没有用反射,而是用字节码增强技术,咱也不知道字节码增强技术为啥这么快。

局限

  1. 不是JAVA自带的,需要用户自己引入 Cglib的依赖
  2. 不能代理final类。

评论
 上一篇
mysql中按照in条件顺序输出 mysql中按照in条件顺序输出
如何保证 mysql 输出 按照in条件顺序输出
2022-04-02
下一篇 
深入分析I/O模型 深入分析I/O模型
我们要讲IO模型,我不像网上的一些文章,上来就讲 阻塞IO、非阻塞IO、多路复用IO、信号驱动IO、异步IO等的原理,也不讲 同步、异步、阻塞、非阻塞 的区别和联系,更不想讲 多路复用IO中 select、poll、epoll 的三种实现。虽然后面都会讲到。