AOP执行过程
2024-02-01 15:29:04 0 举报
AOP执行过程
作者其他创作
大纲/内容
mi.proceed()链式调用下一个
AspectJAfterAdvice
AspectJAfterReturningAdvice
获取代理对象,并执行对应的方法来进行处理
advice.afterReturning
index!=size-1index++当前index=0
AfterReturning
index!=size-1index++当前index=3
getInterceptorsAndDynamicInterceptionAdvice获取整个消息通知的责任链,按照链式结构依次调用执行
BeforeAdviceInterceptor
lazyGetProceedingJoinPoint
如果抛异常
AfterThrowing
用户方法
调用proceed方法
Around
AspectJMethodBeforeAdvice
invokeAdviceMethod
看到的是反编译之后的字节码文件调用任何方法,执行的都是DynamicAdvisedInterceptor对象
index!=size-1index++当前index=4
ExposeInvocationInterceptor
invokeAdviceMethod执行用户的Around方法
调用用户前置方法advice.before
1. AOP整个执行过程,靠MethodInvocation把拦截器串接执行。每执行完一个Interceptor,调用mi.proceed()方法回到MethodInvocation类中,获取下一个拦截器,直到所有拦截器执行完毕,调用用户方法,然后依次弹栈,执行拦截器后续方法cglib代理类:CglibMethodInvocation2. 红色虚线表示执行完成弹栈的过程
index!=size-1index++当前index=5
用户后置处理......
调用父类ReflectiveMethodInvocation的proceed方法index从-1开始
前置处理......
AspectJAfterThrowingAdvice
intercept开始执行具体逻辑
否
在创建代理对象的过程中,是通过wrapIfNecessary方法来创建对象的
index!=size-1index++当前index=1
AspectJAroundAdvice
创建CglibMethodInvocation对象
index=size-1
invokeJoinpoint调用具体的业务逻辑
invocation.set(oldInvocation)
After
index!=size-1index++当前index=2
拦截器链中包含多少个对象由之前定义的消息通知来决定,如果全部定义的话,包含的是6个
invocation.set(mi)
是
0 条评论
下一页