【Spring源碼】26.AOP之代理執(zhí)行時切面的鏈式調用偽代碼演示

用偽代碼的形式看看,所有切面執(zhí)行時的總體流程是咋樣的。

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(){ //調回核心方法
                                                        // 所有切面執(zhí)行完成。執(zhí)行原生方法
                                                        method.invoke()();
                                                    }
                                                }catch(E x){
                                                    @AfterThrowing(e){};//出現異常
                                                }
                                            }
                                        }
                                        @AfterReturning(){};
                                    }
                                }
                            }finally{
                                @After(){};
                            }
                        }
                    }
                }
            }
            //@Around() dosomething end...
        }
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容