ITEEDU

JDK动态代理和CGLIB

spring中AOP同时支持JDK动态代理和CGLIB。

  1. 如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
  2. 如果目标对象实现了接口,可以强制使用CGLIB实现AOP
  3. 如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

如何强制使用CGLIB实现AOP?

  1. 添加CGLIB库,SPRING_HOME/cglib/*.jar
  2. 添加proxy-target-class=”true”属性

如果使用的注释配制aop,在<aop:aspectj-autoproxy>标签中添加。

<aop:aspectj-autoproxy proxy-target-class="true"/>

如果使用的是配制文件方式,在<aop:config>标签中添加。

<aop:config proxy-target-class="true">