Spring AOP -- 10大细节之细节九:环绕通知的执行顺序&抛出异常让其他通知感受到

9、环绕通知的执行顺序&抛出异常让其他通知感受到

9.1、环绕通知的执行顺序

将普通通知和环绕通知全都打开,一起运行

9.1.1、正常执行

在这里插入图片描述

运行结果:
在这里插入图片描述

9.1.2、异常执行

在这里插入图片描述

运行结果:
在这里插入图片描述

这是因为环绕通知首先捕获到异常,并在环绕通知的catch块中处理了,所以普通通知的异常通知就捕获不到了。

9.1.3、结论

环绕通知是优先于普通通知执行的:
环绕前置、普通前置、目标方法执行、环绕正常返回/出现异常、环绕后置、普通后置、普通返回/出现异常

9.2、抛出异常让其他通知知道

当程序出现了异常,而环绕通知和普通通知一起运行的时候,环绕通知的异常通知首先执行,并把异常在catch块中进行处理,外界的通知就无法捕获到这个异常,为了让外界知道这个异常,这个异常不能在环绕通知里面进行处理,要在环绕的catch块中将这个异常抛出去

} catch (Throwable e) {
//环绕的异常通知  @AfterThrowing
System.out.println("环绕异常通知:"+name+"方法出现了异常,异常信息是:"+e);
throw new RuntimeException(e);

运行结果:
在这里插入图片描述

现在外界的通知就能捕获到异常了。

9.2、环绕通知和普通通知的选择

1、普通通知:普通通知是不能影响到程序的运行的,只能在程序运行到某个阶段,去看一下程序都做了什么

2、环绕通知:环绕通知是可以影响到程序本身的,环绕通知的

proceed = pjp.proceed(args);

这个方法,决定了这个切面类能不能切入到目标方法中。

3、如果只是想看看程序运行的结果,那就选择普通通知,如果是想影响程序的运行,改变程序的一些值,那就可以使用环绕通知。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值