自定義切面編程,執行過程分析Around > Before > Around > After > AfterReturning[AfterThrowing]

AspectJ:面向切面的框架。

主要包括:切面包含切點(Pointcut)及通知(Advice),完整的Aop還應包含連接點(Joint point);

響應順序:通知響應順序如下:

                  

通過代碼分支得知響應順序爲

Around > Before > Around > After > AfterReturning[AfterThrowing]

說明:

 1)上圖中三個綠色部分比較特殊這裏需要說明一下:

      通知裏比較特殊的是環繞通知(Arround),環繞通知貫穿切點方法(業務代碼),需要通過

    Object o = ProceedingJoinPoint.proceed();

       完成切點方法(業務代碼)並將其執行結果返回,已保證調用鏈條繼續向下執行。

      也就是說, 如果業務代碼報錯了,ProceedingJoinPoint.proceed()之後的Arround也就不執行了。

2)切點方法(業務代碼)執行報錯了,並不影響After的執行。

3) 根據切點方法(業務代碼)執行過程是否報錯,決定執行AfterReturning或者AfterThrowing。

示例代碼:

          這裏只給出Arround的代碼

@Around("demoAspect()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable{
    System.out.println("Around processed before");
    Object o = joinPoint.proceed();
    System.out.println("Around processed end");
    return o;
}

    Arround的使用要求類似Filter,joinPoint.proceed()完成切點方法(業務代碼)的繼續執行,當發現加入@Arround通知 後無法執行@Before或者業務代碼,或者沒有返回值時,可以考慮該通知使用有誤。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章