深入理解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正常顺序 + 异常顺序
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执行顺序内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!