Spring源码-Aspect-概述

总结摘要
Spring AOP Aspect Overview
  1. Aspect 使用场景
  2. 接口定义 Advice/Pointcut/Advisor
  3. Aspect 执行顺序
  4. Aspect-Bean解析流程
    1. SmartInstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
    2. SmartInstantiationAwareBeanPostProcessor#postProcessAfterInitialization
  5. Aspect-Interceptor执行流程
    1. JdkDynamicAopProxy#invoke
    2. DynamicAdvisedInterceptor#intercept
    3. ReflectiveMethodInvocation#proceed

  1. PointcutAdvisor = Advice + Pointcut
  2. Advice: AspectJAroundAdvice/AspectJMethodBeforeAdvice/AspectJAfterAdvice/AspectJAfterReturningAdvice/AspectJAfterThrowingAdvice
  3. Pointcut: AspectJExpressionPointcut
  4. PointcutAdvisor: InstantiationModelAwarePointcutAdvisorImpl instanceof PointcutAdvisor
  5. Advisor refers to PointcutAdvisor
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 声明式
org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator
-> org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator
-> org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator
-> org.springframework.aop.framework.autoproxy.InfrastructureAdvisorAutoProxyCreator
org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator


// 编程式
org.springframework.aop.framework.ProxyFactory
org.springframework.aop.aspectj.annotation.AspectJProxyFactory
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator
 bean name 过滤期望被 AOP 代理的普通 bean
-> org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator#getAdvicesAndAdvisorsForBean
    -> org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator#isSupportedBeanName
        -> org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator#isMatch
配置 advisor/advice/interceptor参见 org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#resolveInterceptorNames
-> org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#setInterceptorNames


org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator
 advisor bean name 过滤 advisor
-> org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator#isEligibleAdvisorBean
    -> org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator#getAdvisorBeanNamePrefix


org.springframework.aop.framework.ProxyFactoryBean
工厂模式创建代理
过滤 advisor/advice/interceptor相关注释 The referenced beans should be of type Interceptor, Advisor or Advice.
-> org.springframework.aop.framework.ProxyFactoryBean#setInterceptorNames

END