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 }

执行业务方法测试结果:

注意,如果业务方法中的异常被处理,程序没有中断,继续执行了,那么后置处理会继续执行。

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