1. 程式人生 > >17.Spring學習筆記_返回通知&異常通知&環繞通知(by尚矽谷_佟剛)

17.Spring學習筆記_返回通知&異常通知&環繞通知(by尚矽谷_佟剛)

返回通知

  • 無論連線點是正常返回還是丟擲異常, 後置通知都會執行. 如果只想在連線點返回的時候記錄日誌, 應使用返回通知代替後置通知
  • 在返回通知中, 只要將 returning 屬性新增到 @AfterReturning 註解中, 就可以訪問連線點的返回值. 該屬性的值即為用來傳入返回值的引數名稱. 
  • 必須在通知方法的簽名中新增一個同名引數. 在執行時, Spring AOP 會通過這個引數傳遞返回值.
  • 原始的切點表示式需要出現在 pointcut 屬性中

異常通知

  • 只在連線點丟擲異常時才執行異常通知
  • 將 throwing 屬性新增到 @AfterThrowing 註解中, 也可以訪問連線點丟擲的異常. Throwable 是所有錯誤和異常類的超類. 所以在異常通知方法可以捕獲到任何錯誤和異常.
  • 如果只對某種特殊的異常型別感興趣, 可以將引數宣告為其他異常的引數型別. 然後通知就只在丟擲這個型別及其子類的異常時才被執行.


環繞通知

  • 環繞通知是所有通知型別中功能最為強大的, 能夠全面地控制連線點. 甚至可以控制是否執行連線點.
  • 對於環繞通知來說, 連線點的引數型別必須是 ProceedingJoinPoint . 它是 JoinPoint 的子介面, 允許控制何時執行, 是否執行連線點.
  • 在環繞通知中需要明確呼叫 ProceedingJoinPoint 的 proceed() 方法來執行被代理的方法. 如果忘記這樣做就會導致通知被執行了, 但目標方法沒有被執行.
  • 注意: 環繞通知的方法需要返回目標方法執行之後的結果, 即呼叫 joinPoint.proceed(); 的返回值, 否則會出現空指標異常