欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

深入理解Spring Aop的执行顺序

程序员文章站 2024-01-15 09:24:34
首先回忆一下 aop 的常用注解 @before:前置通知:目标方法之前执行 @after:后置通知:目标方法之后执行 @afterreturning:返回后通知:执行方法结束前执行...

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