DefaultAdvisorAutoProxyCreator
,基于上下文中所有的advisor简单的代理创建器实现
AspectJAwareAdvisorAutoProxyCreator
能处理AspectJ相关规则和advice
<aop:aspectj-autoproxy />
导致 AnnotationAwareAspectJAutoProxyCreator
?注册,该bean扩展于 AspectJAwareAdvisorAutoProxyCreator
,支持@AspectJ
注解
1 2 3 4 5 6 7 8 9 |
<aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.javacoder..*Service*.*(..)||)"/> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*NoTransaction" propagation="NOT_SUPPORTED"/> </tx:attributes> </tx:advice> |
定义一个advisor,advisor中封装了pointcut(什么地方应用advice), advice就是在该pointcut处增强的逻辑
今天发现老项目中每个bean被代理了两次, 经过debug发现是shiro模块向上下文中手动注册了一个DefaultAdvisorAutoProxyCreator
,而<aop:aspectj-autoproxy />
注解注入了AnnotationAwareAspectJAutoProxyCreator
, 从而导致bean被代理了两次。
Posted in: spring practise
Comments are closed.