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>
执行业务方法测试:
注意,如果抛出异常的类型和异常通知的业务方法参数异常类型不一致,或者业务方法中将异常处理,那么异常通知不会执行。
我是戴着假发的程序员,分享技术,分享经验,如果要转载,请注明:出自戴着假发的程序员