1. 程式人生 > >Spring 學習(十七)——Spring AOP之返回通知、異常通知和環繞通知

Spring 學習(十七)——Spring AOP之返回通知、異常通知和環繞通知

返回通知

無論連線點是正常返回還是丟擲異常, 後置通知都會執行. 如果只想在連線點返回的時候記錄日誌, 應使用返回通知代替後置通知.

 

在返回通知中訪問連線點的返回值

在返回通知中, 只要將 returning 屬性新增到 @AfterReturning 註解中, 就可以訪問連線點的返回值. 該屬性的值即為用來傳入返回值的引數名稱.

必須在通知方法的簽名中新增一個同名引數. 在執行時, Spring AOP 會通過這個引數傳遞返回值.

原始的切點表示式需要出現在 pointcut 屬性中

 

異常通知

只在連線點丟擲異常時才執行異常通知

throwing 屬性新增到 @AfterThrowing 註解中, 也可以訪問連線點丟擲的異常. Throwable 是所有錯誤和異常類的超類. 所以在異常通知方法可以捕獲到任何錯誤和異常.

如果只對某種特殊的異常型別感興趣, 可以將引數宣告為其他異常的引數型別. 然後通知就只在丟擲這個型別及其子類的異常時才被執行.

 

 

環繞通知

環繞通知是所有通知型別中功能最為強大的, 能夠全面地控制連線點. 甚至可以控制是否執行連線點.

對於環繞通知來說, 連線點的引數型別必須是 ProceedingJoinPoint . 它是 JoinPoint

的子介面, 允許控制何時執行, 是否執行連線點.

在環繞通知中需要明確呼叫 ProceedingJoinPoint proceed() 方法來執行被代理的方法. 如果忘記這樣做就會導致通知被執行了, 但目標方法沒有被執行.

注意: 環繞通知的方法需要返回目標方法執行之後的結果, 即呼叫 joinPoint.proceed(); 的返回值, 否則會出現空指標異常

 

環繞通知示例程式碼