疑问:ApplicationContext 的advisor 怎样初始化的?
...
Insight 过程接着Insight aop:aspectj-autoproxy 解析,post-processor在wrapIfNecesary 方法中会涉及Find all candidate Advisors 的过程,初始化就是在这里完成的。
读懂AOP:'配置'或者'@AspectJ'或者'AutoProxyCreator',必看AOP concepts。
...
advisor 初始化的过程:
首先需要明确的是:advisor 解析分别来自‘schema-based approach’ 和‘@AspectJ annotaion style’。
初始化的advisors = 当前的AnnotationAwareAspectJAutoProxyCreator解析@Aspect advisor + 父类AbstractAdvisorAutoProxyCreator解析<aop:advisor> advisor。
@Override
protected List
findCandidateAdvisors() {
// superclass find 当前bean factory中的Advisor
// core! BeanFactoryUtils.beanNamesForTypeIncludingAncestors(this.beanFactory, Advisor.class, true, false);
List
advisors = super.findCandidateAdvisors();
// 解析@AspectJ aspects 创建Advisors
// core! BeanFactoryUtils.beanNamesForTypeIncludingAncestors(this.beanFactory, Object.class, true, false); && isAspect
advisors.addAll(this.aspectJAdvisorsBuilder.buildAspectJAdvisors());
return advisors;
}
结论:ApplicationContext 的advisor 解析分两个部分、两个阶段完成的初始化。是在bean-post-processor 判断bean 是否产生AOP proxy 的预处理过程完成;
@AspectJ annotation 就是在这个过程中解析的。
...
对于同一ponitcut 的多个Advice,执行的顺序是怎样的?
to be continued...