Spring1.2:
将事务代理工厂[TransactionProxyFactoryBean ] 或 自动代理拦截器[BeanNameAutoProxyCreator ]
的 proxyTargetClass 属性,设置为true ,则使用CGLIB 代理,此属性 默认为false ,使用JDK 动态代理.
以下引用 Spring Framework reference 2.0.5:
Spring2.0:
Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。(建议尽量使用JDK的动态代理) 如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。 |aop:config proxy-target-class="true"| |aop:aspectj-autoproxy proxy-target-class="true"/| // org.springframework.aop.framework.DefaultAopProxyFactory advisedSupport.isOptimize()与advisedSupport.isProxyTargetClass()默认返回都是false,所以在默认情况下目标对象有没有实现接口决定着Spring采取的策略,当然可以设置advisedSupport.isOptimize()或者advisedSupport.isProxyTargetClass()返回为true,这样无论目标对象有没有实现接口Spring都会选择使用CGLIB代理。 如果当需要使用CGLIB代理和@AspectJ自动代理支持,请按照如下的方式设置 |aop:aspectj-autoproxy| 的 proxy-target-class 属性 : 这样使用CGLIB代理也就不会出现前面提到的ClassCastException问题了,也可以在性能上有所提高,关键是对于代理对象是否继承接口可以统一使用。 |
Spring强制使用CGLIB代理事务..
Spring强制使用CGLIB代理事务..
2009年11月06日 星期五 00:18
猜你喜欢
转载自wangdong4soft.iteye.com/blog/1036617
今日推荐
周排行