Spring源码-SpringAOP切面解析
2021-12-09 23:32:10 26 举报
Spring源码-SpringAOP切面解析
作者其他创作
大纲/内容
如果是AOP或者之前被xml解析过的advisor
AtAfterReturning
new 异常通知
N
ReflectiveAspectJAdvisorFactorygetAdvice()
AtAfter
遍历所有beanName解析出被@Aspect标记的类并加入缓存
AtAround
AtAfterThrowing
将解析的结果加入到缓存中
将切点、通知、类名、方法都封装成一个 advisor 返回
判断当前Bean是否被解析过(循环依赖已创建代理)
true
new 后置通知
new 环绕通知
applyBeanPostProcessorsBeforeInstantiation()
AspectJAwareAdvisorAutoProxyCreator.javashouldSkip()
isInfrastructureClass()当前bean是否是基础Bean是否是Advice、PointCut、Advisor、 AopInfrastructureBean
将解析出来的切面信息加入到缓存中
AtBefore
new 返回通知
拿到切面类中所有的Advice方法
resolveBeforeInstantiation()
shouldSkip()是否原始Bean
new 前置通知
creatBean()
进入重写的shouldSkip()方法
for循环遍历
获取切面类中所有方法,排查@PointCut标注的
是否被解析过缓存中有直接从缓存取
获取切面类中的所有通知对象
未被解析过缓存中没有
switch case
IOC容器中获取所有bean的名称
AbstractAutoProxyCreator.javapostProcessBeforeInstantiation()
直接返回null
BeanFactoryAspectJAdvisorsBuilderbuildAspectJAdvisors()
0 条评论
下一页