Spring Aop的執行順序


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM