深入理解Spring Aop的执行顺序
首先回忆一下 AOP 的常用注解
@Before:前置通知:目标方法之前执行 @After:后置通知:目标方法之后执行 @AfterReturning:返回后通知:执行方法结束前执行 @AfterThrowing:异常通知:出现异常时执行 @Around:环绕通知:环绕目标方法执行Spring4 中aop正常顺序 + 异常顺序
try{ @Before method.invoke(obj, args); @AfterReturning}catch(){ @AfterThrowing}finally{ @After}
正常执行:@Before(前置通知) ====>@After(后置通知) ====>@AfterReturning(正常返回)异常执行:@Before(前置通知) ====>@After(后置通知) ====>@AfterThrowing(方法异常)
另外如果还配置有环绕通知,则环绕通知的前置处理先于@Before执行
环绕通知的后置处理也先于@After、@AfterReturning、@AfterThrowing执行
正常结果:
环绕前置处理@Before前置通知invokeMethod()环绕通知后置处理@After后置通知@AfterReturning / @AfterThrowing
异常结果:
环绕前置处理@Before前置通知@After后置通知@AfterReturning / @AfterThrowing
Spring5 中aop正常顺序 + 异常顺序
正常执行:@Before(前置通知) ====>@AfterReturning(正常返回) ====>@After(后置通知)异常执行:@Before(前置通知) ====>@AfterThrowing(方法异常) ====>@After(后置通知)
加上环绕通知的正常执行结果:
环绕前置处理@Before前置通知invokeMethod()@AfterReturning / @AfterThrowing@After后置通知环绕通知后置处理
加上环绕通知的异常执行结果:
环绕前置处理@Before前置通知@AfterReturning / @AfterThrowing@After```## Spring Aop的执行顺序
首先回忆一下 `AOP` 的常用注解
+ @Before:前置通知:目标方法之前执行
+ @After:后置通知:目标方法之后执行+ @AfterReturning:返回后通知:执行方法结束前执行+ @AfterThrowing:异常通知:出现异常时执行+ @Around:环绕通知:环绕目标方法执行
> Spring4 中aop正常顺序 + 异常顺序
try{ @Before method.invoke(obj, args); @AfterReturning}catch(){ @AfterThrowing}finally{ @After}
正常执行:@Before(前置通知) ====>@After(后置通知) ====>@AfterReturning(正常返回)异常执行:@Before(前置通知) ====>@After(后置通知) ====>@AfterThrowing(方法异常)
另外如果还配置有环绕通知,则环绕通知的前置处理先于@Before执行
环绕通知的后置处理也先于@After、@AfterReturning、@AfterThrowing执行
正常结果:
环绕前置处理@Before前置通知invokeMethod()环绕通知后置处理@After后置通知@AfterReturning / @AfterThrowing
异常结果:
环绕前置处理@Before前置通知@After后置通知@AfterReturning / @AfterThrowing
Spring5 中aop正常顺序 + 异常顺序
正常执行:@Before(前置通知) ====>@AfterReturning(正常返回) ====>@After(后置通知)异常执行:@Before(前置通知) ====>@AfterThrowing(方法异常) ====>@After(后置通知)
加上环绕通知的正常执行结果:
环绕前置处理@Before前置通知invokeMethod()@AfterReturning / @AfterThrowing@After后置通知环绕通知后置处理
加上环绕通知的异常执行结果:
环绕前置处理@Before前置通知@AfterReturning / @AfterThrowing@After
到此这篇关于深入理解Spring Aop的执行顺序的文章就介绍到这了,更多相关Spring Aop执行顺序内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!
相关文章:
1. 使用 kind 和 Docker 启动本地的 Kubernetes环境2. IDEA下因Lombok插件产生的Library source does not match the bytecode报错问题及解决方法(亲测可用)3. Django中如何使用Channels功能4. docker容器调用yum报错的解决办法5. idea设置自动导入依赖的方法步骤6. IntelliJ IDEA导出项目的方法7. intellij idea写Python教程8. python的json包位置及用法总结9. ASP.NET MVC增加一条记录同时添加N条集合属性所对应的个体10. 关于html嵌入xml数据岛如何穿过树形结构关系的问题

网公网安备