美文网首页
【Spring源码】26.AOP之代理执行时切面的链式调用伪代码

【Spring源码】26.AOP之代理执行时切面的链式调用伪代码

作者: 天还下着毛毛雨 | 来源:发表于2023-03-18 11:09 被阅读0次

    用伪代码的形式看看,所有切面执行时的总体流程是咋样的。

    image.png
    MethodInvocation.proceed(){
        AspectJAroundAdvice.invoke(MethodInvocation mi){  // 取出调用链第一个AspectJAroundAdvice,调他的invoke方法
            @Around(){ // 调Around
                //@Around() dosomething start....
                MethodInvocation.proceed(){ //调回核心方法
                    MethodBeforeAdviceInterceptor.invoke(MethodInvocation mi){ // 取出调用链第二个MethodBeforeAdviceInterceptor,调他的invoke方法
                        @Before(){}; // 先调用@Before(),再调回核心方法
                        MethodInvocation.proceed(){ //调回核心方法
                            AspectJAfterAdvice.invoke(MethodInvocation mi){ // 取出调用链第三个AspectJAfterAdvice,调他的invoke方法
                                try {
                                    MethodInvocation.proceed(){ //调回核心方法
                                        AfterReturningAdviceInterceptor.invoke(MethodInvocation mi){ // 取出调用链第四个AfterReturningAdviceInterceptor,调他的invoke方法
                                            MethodInvocation.proceed(){ //调回核心方法
                                                AspectJAfterThrowingAdvice.invoke(MethodInvocation mi){ // 取出调用链第五个AspectJAfterThrowingAdvice,调他的invoke方法
                                                    try{
                                                        MethodInvocation.proceed(){ //调回核心方法
                                                            // 所有切面执行完成。执行原生方法
                                                            method.invoke()();
                                                        }
                                                    }catch(E x){
                                                        @AfterThrowing(e){};//出现异常
                                                    }
                                                }
                                            }
                                            @AfterReturning(){};
                                        }
                                    }
                                }finally{
                                    @After(){};
                                }
                            }
                        }
                    }
                }
                //@Around() dosomething end...
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:【Spring源码】26.AOP之代理执行时切面的链式调用伪代码

          本文链接:https://www.haomeiwen.com/subject/xcvsrdtx.html