Insight spring advisor 初始化

彭梓
2023-12-01

疑问: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...

 类似资料: