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 }
再测试:
如果还不明白,请看视频讲解。
我是戴着假发的程序员,分享技术,分享经验,如果要转载,请注明:出自戴着假发的程序员