【問題背景】
基于XML配置開發AspectJ和基于注解開發AspectJ時報錯:error at ::0 formal unbound in pointcut
【問題分析】
切點綁定失敗,必然是AspectJ相關配置出現問題。
【問題解決】
逐一檢視配置,包括每個切點的定義,切面配置,通知配置。經排查,發現是“異常通知”配置有誤,沒有将異常throwing出去。
修改前:
<aop:after-throwing method="exceptAdvice" pointcut-ref="pointCut1"/> |
@AfterThrowing(value="pointCut1()") public void exceptAdvice(Throwable e) { System.out.println("異常通知,程式執行異常"+e.getMessage()); } |
修改後:
<aop:after-throwing method="exceptAdvice" pointcut-ref="pointCut1" throwing="e"/> |
@AfterThrowing(value="pointCut1()",throwing="e") public void exceptAdvice(Throwable e) { System.out.println("異常通知,程式執行異常"+e.getMessage()); } |
【總結】
Spring AOP出現問題很容易排查的,常見的報錯原因可能有:
1.缺少依賴包
2.包掃描失敗或未正确掃描目标類或切面類所在的包
3.注解配置時,(函數本身或注解)參數遺漏或者參數錯誤、缺少注解等。
4.配置檔案中配置AspectJ時,标簽屬性遺漏或屬性值格式不正确。