aop动态代理和拦截器介绍(源码解析级别)
2021-09-27 09:45:47 9 举报
aop动态代理和拦截器相关介绍
作者其他创作
大纲/内容
一切都是为了扩展使用
proxyFactory
sortAdvisors
MethodBeforeAdviceAdapter
advice
AspectJAfterThrowingAdvice
before5
around4
ABCD
adviced
D
AspectJAroundAdvice
进行通知的排序操作
afterThrowing1
设置callback
后续执行具体逻辑
ACBD
当使用cglib创建代理对象的时候,需要先创建一个enhancer的对象
某个代理类中包含m1和m2两个方法,当分别调用两个方法的时候,能否执行通知?肯定可以如果m1中调用m2的方法,那么在调用m2的时候会执行通知吗?不会执行,如果想让他执行的话,就必须要设置expose-proxy属性值为true
MethodInterceptor
AspectJAfterAdvice
在around的执行逻辑过程中会调用before来执行
用来配置代理
Key_FACTORY的对象
内部的接口类
原本可以所有的advice都实现MethodInterceptor接口,但是为了提高扩展性,还需要提供适配器的模式,那么在进行MethodInterceptor组装的时候就需要多加额外的判断逻辑,不能添加两次,所以可以把实现了MethodInterceptor接口的某些advice直接用过适配器来实现,而不需要通过原来的方式实现了。
具体的某一个消息通知
AspectJAfterReturningAdvice
enhancer.create()
通知器包含advice和pointcut
m1
afterReturning2
advisor
MyAspectJMethodBeforeAdvice
m2
B
AfterReturningAdviceAdapter
设置superClass
C
exposeInvocationInterceptor0根据索引的下标依次获取对应的通知来执行,相当于是联系者
after3
AspectJMethodBeforeAdvice
A
排序后的结果
需要通过动态代理的方式来实现
AsepctJAfterReturingAdvice没有invoke方法
ThrowsAdviceAdapter
1
before是在aournd中间过程中执行的
0 条评论
下一页