spring-aop流程图
2021-08-30 19:04:14 8 举报
spring-aop流程图
作者其他创作
大纲/内容
通过缓存获取所有advisors一顿matches,找到所有匹配的然后排序
会按照Around, Before,After, AfterReturning, AfterThrowing排列再按照名称排列ReflectiveAspectJAdvisorFactory#adviceMethodComparator
当exposeProxy为true是,则通过AopContext.setCurrentProxy(proxy);设置当前代理到ThreadLocale中
在实例化前调用全局第一次调用时会解析切面,以及事务注解解析InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
CglibAopProxy#getProxy
这时候调用都是有缓存的
在bean初始化完成后,生成代理
这个排序主要排序的是多个aspect之间的顺序,aspect之内的advoice在构建的时候已经拍完序了。在执行的时候会一个aspect执行完后才会执行后面的aspect
根据不同的注解生成不同的advice@Around,@Before,@After,@AfterReturning,@AfterThrowing
否
DefaultAopProxyFactory#createAopProxy
AnnotationAwareAspectJAutoProxyCreator#findCandidateAdvisors
@EnableAspectJAutoProxy
false
JdkDynamicAopProxy#getProxy
true
是
AbstractAutoProxyCreator#createProxy生成代理
getAdvisors
proxyTargetClass是否设置为true
getAdvice
AnnotationAwareAspectJAutoProxyCreator
AspectJAwareAdvisorAutoProxyCreator#shouldSkip
buildAdvisors
ReflectiveMethodInvocation#proceed
获取所有@Pointcut方法,并封装成AspectJExpressionPointcut
.AbstractAdvisorAutoProxyCreator#getAdvicesAndAdvisorsForBean
intercept
.JdkDynamicAopProxy#invoke
AnnotationAwareAspectJAutoProxyCreator#findEligibleAdvisors
AbstractAutoProxyCreator#wrapIfNecessary
AdvisorChainFactory#getInterceptorsAndDynamicInterceptionAdvice根据方法获取调用链
执行调用链,执行完后调用被代理类方法
AbstractAutoProxyCreator#postProcessAfterInitialization
ReflectiveAspectJAdvisorFactory
getPointcut
BeanFactoryAspectJAdvisorsBuilder#buildAspectJAdvisors对所有@Aspect构建所有advisor
是否为接口,是否为jdk代理对象
AspectJAutoProxyRegistrar
AbstractAutoProxyCreator#postProcessBeforeInstantiation
0 条评论
回复 删除
下一页