3.21 切面发布-后置通知

戴着假发的程序员出品  抖音ID:戴着假发的程序员  欢迎关注

[查看视频教程]

所谓后置通知,就是在方法执行结束之后增强。这里的执行结束是彻底结束,如果方法没有返回值,则正常执行结束,如果有返回值则表示返回结束之后。 如果方法在执行过程中出现异常中断,或者进入其他逻辑,那么后置通知就不会再执行。

我们来看案例,我们依然使用上面的Service类,这里我就不在赘述JoinPoint参数的作用了,只要知道在后置通知的方法中,第一个参数就可以传递JoinPoint,而且作用和前置通知的作用完全一致。

在后置通知的方法中我们可以通过returning属性指定一个接受返回值的方法。

 1 /**
 2  * @author 戴着假发的程序员
 3  * 
 4  * @description
 5  */
 6 @Component
 7 @Aspect
 8 public class DkAspect {
 9     @Pointcut("execution(* com.st.dk.demo8.service..*.*(..))")
10     public void pointcut1(){}
11 
12     /**
13      * 后置通知拦截业务方法
14      * 在后置通知中,我们可以通过returning属性标明返回值接收变量名retVal
15      * 然后我们可以将这个变量作为参数传递到增强方法中。
16      * 当被增强方法返回之后,就会将返回值设置到retVal中,如果被增强方法没有返回值则retVal为null;
17      */
18     @AfterReturning(pointcut = "pointcut1()",returning = "retVal")
19     public void afterReturning(Object retVal){
20         System.out.println("--后置通知开始--");
21         System.out.println("被拦截方法的返回值:"+retVal);
22         System.out.println("--后置通知结束--");
23     }
24 }

给InfoService中的业务方法添加一个返回值:

1 public String showInfo(String info){
2     System.out.println("InfoService-showInfo输出信息:"+info);
3     return "info方法返回值";
4 }

再测试:

注意:后置通知可以接受被增强方法的返回值,具体的使用方式在上面的程序中已经给出详细的注释。

如果程序出现异常中断,那么后置通知就不会被执行:

我们看案例:修改业务方法,手动添加一个异常:

 1 /**
 2  * @author 戴着假发的程序员
 3  * 
 4  * @description
 5  */
 6 @Component
 7 public class InfoService {
 8     public String showInfo(String info){
 9         System.out.println("InfoService-showInfo输出信息:"+info);
10         String str = null;
11         str.trim();//抛出空指针异常不做处理
12         return "info方法返回值";
13     }
14 }

再测试:

我们会发现执行了业务方法的一部分,抛出异常,程序中断,后置通知就不会再执行了。

当然如果我们处理了异常,程序不会中断,后置通知依然会执行。

案例:

 1 public String showInfo(String info){
 2     System.out.println("InfoService-showInfo输出信息:"+info);
 3     try{
 4         String str = null;
 5         str.trim();//抛出空指针异常不做处理
 6     }catch (Exception e){
 7         System.out.println("出现异常:"+e.getMessage());
 8     }
 9     return "info方法返回值";
10 }

再测试:

如果还不明白,请看视频讲解。

posted @ 2020-10-28 17:25  戴着假发的程序员0-1  阅读(151)  评论(0编辑  收藏  举报