多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
spring代理使用jdk动态代理和cglib代理,首选jdk动态代理. 如果要被代理的目标对象实现了接口,就会使用jdk动态代理,如果没有实现接口,使用cglib代理. 如果要强制使用cglib,要考虑以下问题: * final 方法不能代理,因为是不能重写的 * 从spring3.2开始,不再需要引入cglib到项目类路径,已经被封装到spring-core的jar包内 * 从spring4.0开始,代理对象的构造函数将不再被调用两次,因为CGLIB代理实例将通过Objenesis创建。 只有当您的JVM不允许构造函数绕过时,您才可能看到来自Spring的AOP支持的双重调用和相应的调试日志条目。 强制使用cglib的xml配置如下: ~~~xml <aop:config proxy-target-class="true"> <!-- other beans defined here... --> </aop:config> ~~~ 支持@AspectJ强制使用cglib ~~~xml <aop:aspectj-autoproxy proxy-target-class="true"/> ~~~ >注意: 使用 `proxy-target-class="true"` 在 `<tx:annotation-driven/>`, `<aop:aspectj-autoproxy/>` 或 `<aop:config/>` 元素上,会强制使用 CGLIB 代理. >