Cglib不是更强么,为什么有了Cglib还要有JDK动态代理存在的必要?
- final Class 不支持, 因为CGLIB是生成子类来实现 AOP,所以final Class自然无法支持了.
JDK动态代理
优点
- JAVA自带,JDK原生的,到哪儿都能用。Cglib则需要额外的包来支持。
- 支持final类的代理,因为是基于接口的,跟被代理对象是不是final的没有关系。Cglib 不能代理final类,因为Cglib是基于继承来实现的,final类无法被继承,不然String这个类就可以被改来改去了。
局限 - 一定要有接口,它是基于接口+反射实现的。Cglib不要接口,有个类就能代理。
- 速度慢,效率低,因为是基于反射的,所以效率不高。
Cglib动态代理
优点
- 不一定需要接口,只要不是final类,就能代理。
- 速度快,都这么说,因为没有用反射,而是用字节码增强技术,咱也不知道字节码增强技术为啥这么快。
局限
- 不是JAVA自带的,需要用户自己引入 Cglib的依赖
- 不能代理final类。