让切面生效,需要开启注解/xml配置
@EnableAspectJAutoProxy
等价于
<!-- 启用 AspectJ 自动代理 -->
<aop:aspectj-autoproxy/>
原理是:跟踪代码
根据命名空间去找对应的类
找到aspectj-autoproxy
使用的是AbstractAspectJAdvisorFactory
特别重要
特别重要
特别重要
特别重要
@EnableAspectJAutoProxy //配置文件需要开启注解
以上都是跟踪的过程,下面是总结
跟踪代码下去,还是通过
总结:
1、提供自动代理的Creator
使用注解的提供:AnnotationAwareAspectJAutoProxyCreator
使用xml的提供:AspectJAwareAdvisorAutoProxyCreator
2、bean后置处理器
AnnotationAwareAspectJAutoProxyCreator 和 AspectJAwareAdvisorAutoProxyCreator 都是一个BeanPostProcessor
3、BeanPostProcessor的2个方法:
postProcessBeforeInitialization
postProcessAfterInitialization 这里使用这个
4、再通过 BeanPostProcessor#postProcessAfterInitialization的方法来判断是否是需要给该bean做动态代理。需要就给代理上。
这个是对注解和xml的核心原理。为毛能生效,都是因为给目标做了代理