AOP中几种常见的通知类型及其基本作用:
- @Before:前置通知,在目标方法执行之前执行。
- @After:后置通知,无论方法执行结果如何(包括异常),都会在目标方法执行之后执行。
- @AfterReturning:返回后通知,在目标方法正常结束后执行,但如果方法抛出异常则不会执行。
- @AfterThrowing:异常通知,在目标方法抛出异常时执行。
- @Around:环绕通知,可以在目标方法执行前后进行自定义操作,甚至可以决定是否继续执行目标方法
Spring4与Spring5中AOP执行顺序的区别
Spring4中的AOP执行顺序
- 正常执行顺序:
- @Before(前置通知)
- 目标方法执行
- @After(后置通知)
- @AfterReturning(返回后通知)
- 异常执行顺序:
- @Before(前置通知)
- 目标方法执行(抛出异常)
- @After(后置通知)
- @AfterThrowing(异常通知)
如果配置了环绕通知(@Around),则环绕通知的前置处理会先于@Before执行,环绕通知的后置处理也会先于@After、@AfterReturning、@AfterThrowing执行。
Spring5中的AOP执行顺序
在Spring5中,AOP的执行顺序发生了一些变化,主要体现在@AfterReturning和@After的执行顺序上:
- 正常执行顺序:
- @Before(前置通知)
- 目标方法执行
- @AfterReturning(返回后通知)
- @After(后置通知)
- 异常执行顺序:
- @Before(前置通知)
- 目标方法执行(抛出异常)
- @AfterThrowing(异常通知)
- @After(后置通知)
如果配置了环绕通知(@Around),则环绕通知的执行顺序仍然是最先执行其前置处理,然后是目标方法执行,接着是其他通知(@AfterReturning、@AfterThrowing、@After),最后是环绕通知的后置处理。