SpringAOP的坑

AOP中几种常见的通知类型及其基本作用:

  • @Before:前置通知,在目标方法执行之前执行。
  • @After:后置通知,无论方法执行结果如何(包括异常),都会在目标方法执行之后执行。
  • @AfterReturning:返回后通知,在目标方法正常结束后执行,但如果方法抛出异常则不会执行。
  • @AfterThrowing:异常通知,在目标方法抛出异常时执行。
  • @Around:环绕通知,可以在目标方法执行前后进行自定义操作,甚至可以决定是否继续执行目标方法

Spring4与Spring5中AOP执行顺序的区别

Spring4中的AOP执行顺序

  • 正常执行顺序:
    1. @Before(前置通知)
    2. 目标方法执行
    3. @After(后置通知)
    4. @AfterReturning(返回后通知)
  • 异常执行顺序:
    1. @Before(前置通知)
    2. 目标方法执行(抛出异常)
    3. @After(后置通知)
    4. @AfterThrowing(异常通知)

如果配置了环绕通知(@Around),则环绕通知的前置处理会先于@Before执行,环绕通知的后置处理也会先于@After、@AfterReturning、@AfterThrowing执行。

Spring5中的AOP执行顺序

在Spring5中,AOP的执行顺序发生了一些变化,主要体现在@AfterReturning和@After的执行顺序上:

  • 正常执行顺序:
    1. @Before(前置通知)
    2. 目标方法执行
    3. @AfterReturning(返回后通知)
    4. @After(后置通知)
  • 异常执行顺序:
    1. @Before(前置通知)
    2. 目标方法执行(抛出异常)
    3. @AfterThrowing(异常通知)
    4. @After(后置通知)

如果配置了环绕通知(@Around),则环绕通知的执行顺序仍然是最先执行其前置处理,然后是目标方法执行,接着是其他通知(@AfterReturning、@AfterThrowing、@After),最后是环绕通知的后置处理。

相关推荐
Diligently_14 小时前
Anolis 系统更新与密码设置&磁盘扩容
java·后端·spring
mqiqe14 小时前
线程调度与 Schedulers:Project Reactor 并发模型的核心引擎
java·开发语言·网络
我命由我1234514 小时前
Android 开发问题:unexpected element <service> found in <manifest>
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
正在走向自律15 小时前
飞算JavaAI能搞定充电站故障处置吗?
java·ai编程·java开发·飞算javaai·java代码生成·ai coding模型·springboo
用户409666013175115 小时前
Guava 不止有 Lists 和 Maps:Cache、EventBus、Multimap 实战
java·后端
一只叫煤球的猫15 小时前
从 Java 21 到 Java 25:ThreadLocal 以外的选择—— ScopedValue
java·后端·架构
步行cgn16 小时前
MyBatis 多对一关联映射详解
java
仍然.16 小时前
SpringCloud---Eureka介绍
java·spring cloud·eureka
霸道流氓气质16 小时前
Spring 事务同步机制 —— AfterTransactionActionCollector 的异步解耦原理
java·后端·spring