0%

JAVA-JDK动态代理或CGLIB

使用JDK动态代理

Spring AOP默认使用JDK动态代理(基于接口的代理)。

如果被代理的目标对象已经实现了接口,则使用JDK动态代理。如果目标对象未实现任何接口,则会创建CGLIB代理。

使用CGLIB代理注意

  • final方法不建议使用,因为它们无法被覆盖。
  • 除非强制使用CGLIB,需要将元素 <aop:config> 的属性proxy-target-class值设置为true。
  • 需要CGLIB库,找不到CGLIB库类时,Spring会发出警告。
  • 代理对象的构造函数将被调用两次。这是因为CGLIB代理会为每个代理对象生成子类。构造函数中只做赋值和初始化,不能实现其他的逻辑。