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>

执行业务方法测试:

注意,如果抛出异常的类型和异常通知的业务方法参数异常类型不一致,或者业务方法中将异常处理,那么异常通知不会执行。

posted @ 2020-11-04 09:14  戴着假发的程序员0-1  阅读(113)  评论(0编辑  收藏  举报