首页 > 其他分享 >Spring AOP @Before @Around @After 等 advice 的执行顺序

Spring AOP @Before @Around @After 等 advice 的执行顺序

时间:2022-11-01 11:31:27浏览次数:51  
标签:顺序 Around Spring advice aspect 注解 执行 Order


最近在写项目时用到了AOP的advice来实现通知,后来了解到它在权限控制及其他方面也有很好的利用价值,所以整理了一份AOP各种通知的执行顺序

在一个方法只被一个aspect类拦截时,aspect类内部的 advice 将按照以下的顺序进行执行:

正常情况:

Spring AOP @Before @Around @After 等 advice 的执行顺序_Spring

异常情况:

Spring AOP @Before @Around @After 等 advice 的执行顺序_权限控制_02

当然,上面仅是被一个Aspect类拦截,如果是被多个Aspect类拦截呢?

在默认情况下,不同的aspect执行顺序是随机的,我们可以通过实现org.springframework.core.Ordered接口,实现它的getOrder()方法或给aspect添加@Order注解,该注解全称为:org.springframework.core.annotation.Order来使其变的有序,不管采用上面的哪种方法,都是值越小的 aspect 越先执行

比如我们给两个aspect分别添加@Order注解

@Order(5)
@Component
@Aspect
public class Aspect1 {
// ...
}

@Order(6)
@Component
@Aspect
public class Aspect2 {
// ...
}

这样修改之后,可保证不管在任何情况下, aspect1 中的 advice 总是比 aspect2 中的 advice 先执行。如下图所示:

Spring AOP @Before @Around @After 等 advice 的执行顺序_Spring_03

当然如果在同一个 aspect 类中,针对同一个 pointcut,定义了两个相同的 advice(比如,定义了两个 @Before),那么这两个 advice 的执行顺序是无法确定的,哪怕你给这两个 advice 添加了 @Order 这个注解也不行

标签:顺序,Around,Spring,advice,aspect,注解,执行,Order
From: https://blog.51cto.com/u_13351110/5812943

相关文章

  • 初认Spring
    官网地址:https://spring.io/SpringFramework的系统架构1、CoreContiainer:核心容器2、AOP:面向切片编程3、Aspects:AOP思想实现4、DataAccess:数据访问5、DataIntegr......
  • Spring-data-jpa介绍
    ORM框架JPA实体Entity,具有ORM元数据的领域对象,POJO是实体的条件:必须使用javax.persistence.Entity注解或XML映射文件中有对应的​​<entity>​​元素;必须具有一个不带参数的......
  • Java 基于 SpringCloud 数据中台 ETL 工具,可以进行多种常见数据库之间的数据或结构迁
    基于SpringCloud数据中台ETL工具,可以进行多种常见数据库之间的数据或结构迁移提供源端数据库向目的端数据库的批量迁移同步功能,支持数据的全量和增量方式同步。包括:......
  • SpringBoot笔记:Hello World
    SpringBoot简化了Spring应用的初始框架搭建和开发过程,利用SpringBoot框架可以快速的进行Spring应用的开发,SpringBoot具有以下特性:能够快速创建基于Spring的应用程序。提......
  • SpringCloudAlibaba 主要组件与nacos 填坑记录
    SpringCloudAlibaba主要功能与实现组件(1)SpringCloudAlibaba主要功能与实现组件【功能与实现组件:】服务限流降级:基本说明:默认支持WebServlet、WebF......
  • SpringMVC
    SpringMVCMVC:模型(dao,service) 视图(jsp) 控制器(servlet)前端 数据传输 实体类实体类:用户名,密码,生日,爱好,,,,前端:用户名,密码pojo:Uservo:UserVo假设:你的项目的......
  • SpringMVC笔记
    目录一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖3、配置web.xm......
  • Spring
    Spring框架概述Spring是轻量级开源的JavaEE框架Spring可以解决企业应用开发的复杂性Spring有两个核心部分:IOC和AOP(1)IOC:控制反转,把创建对象过程交给Spring容......
  • 模板注入--Spring boot Thymeleaf 模板注入
    Thymeleaf模板安全分析1、Thymeleaf简介Thymeleaf是用于Web和独立环境的现代服务器端Java模板引擎。类似与pythonweb开发中的jinja模板引擎。顺便说一句,Thymeleaf是spr......
  • Springboot导出word,动态填充表格数据
    原文链接:https://blog.csdn.net/qq_23126581/article/details/125446459背景本文将给大家带来如何导入数据到word文档中,固定传值和动态制作表格传值等。依赖:<!-......