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正常顺序 + 异常顺序 ```java
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

最新文章

  1. Supermap iCloudManager -负载均衡
  2. IT软件技术人员的职位路线(从程序员到技术总监) - 部门管理经验谈
  3. 可在广域网部署运行的QQ高仿版 -- GGTalk总览
  4. cf 710 E Generate a String
  5. IIS Express 外部访问
  6. Nested List Weight Sum -- LeetCode 339
  7. 转centos65安装简测mysql cluster 7.3.7
  8. ARM体系架构下的同步操作
  9. SanDisk SecureAccess™ Software
  10. 杭电 HDU 4608 I-number
  11. 线程:Semaphore实现信号灯
  12. 用js 将long类型转换成日期格式
  13. 基于ZYNQ的SOC——Hellow_World实验
  14. Sprite添加阴影摇摆动画(Unity3D开发之九)
  15. 免费代理IP地址列表
  16. Android之官方导航栏ActionBar
  17. tail -f 实时查看日志文件 linux查看日志后100行
  18. [React] 06 - Route: koa makes your life easier
  19. CODE FESTIVAL 2017 qual B 题解
  20. 【Atcoder】AGC027 题解

热门文章

  1. jquery里面.length和.size()有什么区别
  2. web技术培训(一)-云服务器、域名相关
  3. Yii2访问gii模块403
  4. java如何调用本地扬声器
  5. 教你用SQL实现统计排名
  6. es6.4.0安装和配置IK+拼音插件 实现非全拼搜索
  7. checked 和 prop() (散列性比较少的)
  8. 28.HashSet
  9. pt-online-schema-change 大数据表结构修改
  10. Java关键字(八)——synchronized