1. 程式人生 > 實用技巧 >4.7 AOP-XML-異常通知釋出

4.7 AOP-XML-異常通知釋出

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

[檢視視訊教程]

所謂異常通知也很好理解,就是程式出現異常並且沒有處理的情況下就執行異常通知,當然我們也可以在異常通知指明處理異常的型別。

案例:

我們在業務方法中丟擲異常,並且不做處理:

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

在Aspect類中新增一個異常通知業務方法,並且指明異常型別:

 1 /**
 2  * @author 戴著假髮的程式設計師
 3  * @company http://www.boxuewa.com
 4  * @description
 5  */
 6 public class DkAspect {
 7 
 8     /**
 9      * 異常通知
10      * 利用引數ex指定異常型別,非指定型別的異常不會執行改通知業務
11 */ 12 public void afterThrowing(JoinPoint joinPoint,NullPointerException ex){ 13 System.out.println("異常通知,丟擲的異常:"+ex); 14 } 15 }

在aop:config中新增異常通知的配置:

 1 <!-- AOP配置 -->
 2     <aop:config>
 3         <!-- 申明AspectBean,引用我們註冊的dkAspect -->
 4         <aop:aspect 
id="aspect" ref="dkAspcet"> 5 <!-- 宣告一個切入點,命名為pointcut1 --> 6 <!-- xml中不能使用 && ,邏輯與要使用and,--> 7 <!-- 如果我們的before增強方法中傳入了引數msg,我就要使用args(msg)限定切入點 --> 8 <aop:pointcut id="pointcut1" 9 expression="execution(* com.st.beans..*.*(..))"/> 10 <!-- 異常通知 這裡需要指明接受異常的引數名稱 --> 11 <aop:after-throwing method="afterThrowing" throwing="ex" pointcut-ref="pointcut1"/> 12 </aop:aspect> 13 </aop:config>

執行業務方法測試:

注意,如果丟擲異常的型別和異常通知的業務方法引數異常型別不一致,或者業務方法中將異常處理,那麼異常通知不會執行。