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或者業務代碼,或者沒有返回值時,可以考慮該通知使用有誤。