首先回忆一下 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执行顺序内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!