Spring-AOP实现与应用
2021-05-24 11:09:15 7 举报
学习spring的时候,整理的相关流程图
作者其他创作
大纲/内容
(3) 将切面(@Aspect注解标记的bean)转换成一组 Advisor
beanName
这里是 spring 所有的 Advisor
order = Integer.MAX_VALUE
(6) 代理工厂
ObjectX impl ImX
ObjectB
依赖
advisor-...
ExposeInvocationInterceptor
创建原始 bean
CGLiB$$BeanA
字节码
定义
通过 @AspectJ 注解生成的 Advisor 的实现类都是InstantiationModelAwarePointcutAdvisor
ByteBuddy
Advisor-...
Advisor-A
?绑定增强对象到当前线程
imX
AdvisorE
order = Integer.MIN_VALUE
Advice
jdk proxy creator
生成
JDK 代理工厂
Asm
Advisor-Z
AdvisorA
ObjectX
TruePointcut
原始方法
ObjectY impl ImY
(1)获得候选增强器
ExposeAdvisor
ChildB extends ObjectB
BeanC
实现接口
原始对象
cglib proxy creator
AroundX - pointCutA
BeanA
ProxyX
AfterReturning
AfterThrowing
Aop 代理工厂
用于填充注解对象, spring 内部使用, 必须填充
InfrastructureAdvisorAutoProxyCreator
ObjectA
AnnotationAwareAspectJAutoProxyCreator
创建增强对象
Javassist
AdvisorD
beanClass
自动代理创建器BeanDefinition
ChildB
没有关系
AsyncAdvisor
ProxyY impl ImY
CGLiB$$BeanA extends BeanA
AroundZ - pointCutB
expostProxy(Boolean)
持有
方法调用
AdvisorC
PointCut
DefaultPointcutAdvisor
methodAdvisor
被增强的BeanA 持有的 Advisor
BeanPostProcessor-AOP
Advisor-B
MIN_VALUE+1
cglib
mybatis
增强对象
Around
BeanPostProcessor-A
AsyncAdvisor(可以改到队尾)
这三个类都实现了: BeanPostProcessor
(1)从类级别的增强器中过滤当前方法的增强器
Advisor-C
经过AOP 和 异步增强器后, 代理类的 Advisor
BeanPostProcessor-...
Before
methodB
AdvisorB
MAX_VALUE
imY
PointCutB
Advisor
AroundY - pointCutA
beanA
OriginBean
advisor-A
父子关系
支持解析@AspectJ 注解转换成 Advisoraop:aspectj 标签定义
methodA
异步BeanPostProcessor
PointCutA
mockito1.x
advisor-B
基础设施, 只支持Advisor 通常由注解或者自定义标签自动注册
执行 Advisor 和 原始方法
(7) Cglib代理工厂
创建代理对象
原始bean + 类级别的 advisor
BeanPostProcessor-C
Spring 容器
Oracle
ChildA extends ObjectA
bean的实例
依赖(默认)
强制使用CGLIB代理
class Advisor
propertyValues
自定义切面类
mockito2.x
支持xml标签生成 Advisor由 aop:config 的xml标签自动注册
?恢复当前线程绑定的对象
BeanB
proxyTargetClass(Boolean)
ProxyX impl ImX
ProxyY
MIN_VALUE
(2) 实现 Advisor 接口的Bean
AspectJAwareAdvisorAutoProxyCreator
dubbo
被增强的BeanA的 methodA 持有的 Advisor
AspectJ 切面
Advisor-Y
beanA = new BeanA()
(5) 扩展 内部暴露 Advisor
Advisor-X
After
org.springframework.aop.config.internalAutoProxyCreator
ObjectY
1级代理创建器
ChildA
Aop BeanPostProcessor
spring
AsyncAdvisor(默认顺序)
AOP增强器
(8) 代理对象创建完成
收藏
收藏
0 条评论
回复 删除
下一页