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

Spring Aop的执行顺序的更多相关文章

  1. 浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

    简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring ...

  2. 【线上排查实战】AOP切面执行顺序你真的了解吗

    前言 忙,是我这个月的主旋律,也是我频繁鸽文章的接口----蛮三刀把刀 公司这两个月启动了全新的项目,项目排期满满当当,不过该学习还是要学习.这不,给公司搭项目的时候,踩到了一个Spring AOP的 ...

  3. Spring系列26:Spring AOP 通知与顺序详解

    本文内容 如何声明通知 如何传递参数到通知方法中 多种通知多个切面的通知顺序 多个切面通知的顺序源码分析与图解 声明通知 Spring中有5种通知,通过对应的注解来声明: @BeforeBefore ...

  4. Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源

    深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...

  5. Spring Security Filter执行顺序

    1.场景:先走框架过滤器,后走自定义过滤器 @Bean public FilterRegistrationBean resourceFilterRegistration() { FilterRegis ...

  6. 调试:Spring AOP执行过程

    调试项目:https://github.com/1367356/laboratoryWeb 断点位置 点击查询:http://localhost:9002/queryNews?htmlid=15318 ...

  7. Spring Boot 2.X(八):Spring AOP 实现简单的日志切面

    AOP 1.什么是 AOP ? AOP 的全称为 Aspect Oriented Programming,译为面向切面编程,是通过预编译方式和运行期动态代理实现核心业务逻辑之外的横切行为的统一维护的一 ...

  8. Spring Aop实例@Aspect、@Before、@AfterReturning@Around 注解方式配置(转)

    用过spring框架进行开发的人,多多少少会使用过它的AOP功能,都知道有@Before.@Around和@After等advice.最近,为了实现项目中的输出日志和权限控制这两个需求,我也使用到了A ...

  9. Spring Aop面向切面编程&&自动注入

    1.面向切面编程 在程序原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面的过程叫做面向切面编程 2.常用概念 原有功能:切点,pointcut 前置通知:在切点之前执行的功能,befor ...

随机推荐

  1. hdu5249KPI动态中位数(两个set)

    题意(中问题直接粘题意吧)                                                                      KPI Problem Descr ...

  2. Windows下包管理工具Bower的安装和使用

    目录 安装Bower Bower的使用 安装Bower Windows下安装Bower之前,先安装好 nodejs 和 msysgit 环境 然后我们就可以使用npm包管理工具下载并全局安装bower ...

  3. 逆向 ctype.h 函数库 isalnum、iscntrl、islower、isxdigit、tolower 函数

    0x01 isalnum 函数 函数原型:int isalnum(int c); 函数功能:检查所传的字符是否是字母和数字 动态链接库:ucrtbase.dll C\C++ 实现: #define _ ...

  4. Windows核心编程 第八章 用户方式中线程的同步(下)

    8.4 关键代码段 关键代码段是指一个小代码段,在代码能够执行前,它必须独占对某些共享资源的访问权.这是让若干行代码能够"以原子操作方式"来使用资源的一种方法.所谓原子操作方式,是 ...

  5. Caddy-基于go的微型serve用来做反向代理和Gateway

    1.简单配置 2.go实现,直接一个二进制包,没依赖. 3.默认全站https 常用 反向代理,封装多端口gateway 使用:启动直接执行二进制文件 caddy 就行 根据输出信息 直接https: ...

  6. The content of element type "web-app" must match "(icon?,display- name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet- mapping*,session-config?

    web.xml头部配置: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app P ...

  7. mongodb 在PHP中常见问题及解决方法

    1.$in needs an array 解决:查询用到in操作的时候,说in操作对应的不是我一个数组,或者数组索引不是以0开始的 方法:array_values重新生成一个索引为0开始的数组即可 $ ...

  8. 查询某软件所连接的外网IP地址

    一:背景环境: 1>:某机械公司用的某些特殊软件,需要实现所有使用某软件的屏蔽其软件所连接的外网ip,其他上网功能不做限制. 二:需求分析:可以查出此软件所连接的外网ip,在路由器的ip过滤中将 ...

  9. 使用TK框架中 insert与insertSelective区别

    insertSelective会对字段进行判断再更新(如果为Null就忽略更新),如果你只想插入某些字段,可以用这个方法. insert对你注入的字段全部插入

  10. Java线程的6种状态

    6种状态分别是: NEW.RUNNABLE.TERMINATED.WAITING.TIMED_WAITING.BLOCKED NEW:线程创建完毕 RUNNABLE:线程运行中,又分为READY + ...