Spring 學習(十七)——Spring AOP之返回通知、異常通知和環繞通知
阿新 • • 發佈:2018-12-25
返回通知
•無論連線點是正常返回還是丟擲異常, 後置通知都會執行. 如果只想在連線點返回的時候記錄日誌, 應使用返回通知代替後置通知.
在返回通知中訪問連線點的返回值
•在返回通知中, 只要將 returning 屬性新增到 @AfterReturning 註解中, 就可以訪問連線點的返回值. 該屬性的值即為用來傳入返回值的引數名稱.
•必須在通知方法的簽名中新增一個同名引數. 在執行時, Spring AOP 會通過這個引數傳遞返回值.
•原始的切點表示式需要出現在 pointcut 屬性中
異常通知
•只在連線點丟擲異常時才執行異常通知
•將 throwing 屬性新增到 @AfterThrowing 註解中, 也可以訪問連線點丟擲的異常. Throwable 是所有錯誤和異常類的超類. 所以在異常通知方法可以捕獲到任何錯誤和異常.
•如果只對某種特殊的異常型別感興趣, 可以將引數宣告為其他異常的引數型別. 然後通知就只在丟擲這個型別及其子類的異常時才被執行.
環繞通知
•環繞通知是所有通知型別中功能最為強大的, 能夠全面地控制連線點. 甚至可以控制是否執行連線點.
•對於環繞通知來說, 連線點的引數型別必須是 ProceedingJoinPoint . 它是 JoinPoint
•在環繞通知中需要明確呼叫 ProceedingJoinPoint 的 proceed() 方法來執行被代理的方法. 如果忘記這樣做就會導致通知被執行了, 但目標方法沒有被執行.
•注意: 環繞通知的方法需要返回目標方法執行之後的結果, 即呼叫 joinPoint.proceed(); 的返回值, 否則會出現空指標異常
環繞通知示例程式碼