1. 程式人生 > 實用技巧 >4.6 AOP-XML-後置通知釋出

4.6 AOP-XML-後置通知釋出

戴著假髮的程式設計師出品 抖音ID:戴著假髮的程式設計師歡迎關注

[檢視視訊教程]

所謂後置通知就是在目標方法執行結束之後進行業務增強。

我們可以在後置通知的增強方法中傳入JoinPoint和業務方法的返回值。當然也可以什麼都不傳。

看案例:

在Aspect類中新增一個後置通知的方法:

 1 /**
 2  * @author 戴著假髮的程式設計師
 3  * @company http://www.boxuewa.com
 4  * @description
 5  */
 6 public class DkAspect {
 7 
 8     /**
 9      * 後置通知
10      * 使用 retVal接受被增強方法的返回值,如果沒有返回值retval就是null
11 */ 12 public void afterReturning(JoinPoint joinPoint,Object retVal){ 13 System.out.println("後置通知,目標方法的返回值:"+retVal); 14 } 15

在aop:config中新增一個後置通知的配置:

 1 <!-- AOP配置 -->
 2 <aop:config>
 3     <!-- 申明AspectBean,引用我們註冊的dkAspect -->
 4     <aop:aspect id="aspect"
ref="dkAspcet"> 5 <!-- 宣告一個切入點,命名為pointcut1 --> 6 <!-- 如果我們的before增強方法中傳入了引數msg,我就要使用args(msg)限定切入點 --> 7 <aop:pointcut id="pointcut1" 8 expression="execution(* com.st.beans..*.*(..))"/> 9 <!-- 後置通知 --> 10 <
aop:after-returning method="afterReturning" pointcut-ref="pointcut1" returning="retVal"/> 11 </aop:aspect> 12 </aop:config>

執行業務方法執行結果:

注意,如果業務方法出現異常導致程式中斷,後置通知就不會再執行。

案例:

我們給業務方法新增一個異常,並且不做處理:

 1 /**
 2  * @author 戴著假髮的程式設計師
 3  * @company http://www.boxuewa.com
 4  * @description
 5  */
 6 public class MessageBean {
 7     //輸出資訊的業務方法
 8     public String printMessage(String msg){
 9         System.out.println("MessageBean-printMessage:"+msg);
10         String str = null;
11         str.trim();//丟擲空指標異常
12         return msg;
13     }
14 }

執行業務方法測試結果:

注意,如果業務方法中的異常被處理,程式沒有中斷,繼續執行了,那麼後置處理會繼續執行。