-
目标类不同
jdk目标类需要实现接口。
cglib不需要。 -
代理类生成方式不同
jdk内部字节码生成代理类。
cglib使用ASM字节码生成库生成代理类。 -
代理类和目标类关系不同
jdk代理类实现目标类接口,jdk无法代理目标类中static或private的方法。
cglib 代理类继承目标类重写目标类方法,cglib无法代理目标类中static或private的方法外final修饰的目标对象或方法,无法代理。 -
调用目标方法方式不同
jdk通过反射调用目标类方法。
cglib 通过子类调用父类方式调用。 -
同一个类中,方法内部调用代理失效问题
jdk在方法内部调用时,代理会失效。
cglib在方法内部调用时,代理不会失效。
注意:在spring中org.springframework.cglib.proxy,cglib会失效。但是net.sf.cglib.proxy包中不会失效。
jdk和cglib动态代理区别
于 2024-12-19 10:53:45 首次发布