Java动态代理与CGLIB、JDK代理的区别
Java的动态代理主要通过java.lang.reflect.Proxy
类实现,其中常用的代理库有CGLIB和JDK代理(基于接口)。
CGLIB代理:
- 由字节码生成一个真正的类。
- 优点是不需要目标接口,透明化改造对象。
- 缺点是生成的类在JVM中是唯一的,如果要多台机器共享,就不适用。
JDK代理(基于接口):
- 直接通过Java的反射API来创建一个代理对象,这个代理对象实际上是一个实现了目标接口的类的对象。
- 优点是透明化操作,生成的类和目标类共享字节码,效率高。
- 缺点是如果目标类没有实现接口,那么就需要手动实现接口。
总的来说,CGLIB适合需要透明化改造目标对象的情况,而JDK代理更适合基于接口进行功能调用的场景。
还没有评论,来说两句吧...