使用@Order控制配置类/AOP/方法/字段的加载顺序详解
作者:公瑾子敬 发布时间:2023-09-05 17:34:35
标签:@Order,配置类,AOP,方法,字段,加载顺序
@Order控制配置类/AOP/方法/字段的加载顺序
1.AOP加载顺序
@Component
@Aspect
@Order(1)
public class Aspect1 {
...
System.out.println("aop-1 加载了");
}
@Component
@Aspect
@Order(2)
public class Aspect2 {
...
System.out.println("aop-2 加载了");
}
执行顺序:
aop-1 加载了
aop-2 加载了
2.配置类加载顺序
@Configuration
@Order(1)
public class DemoConfig1 {
@Bean
public Demo1Service demo1Service(){
System.out.println("config-1 加载了");
return new Demo1Service();
}
}
@Configuration
@Order(2)
public class DemoConfig2 {
@Bean
public Demo2Service demo2Service(){
System.out.println("config-2 加载了");
return new Demo2Service();
}
}
执行顺序:
config-1 加载了
config-2 加载了
tips:
Integer.MIN_VALUE <= Order <= Integer.MAX_VALUE
Order值越小,优先级越高!
@Order的作用范围:
ElementType.TYPE, ElementType.METHOD, ElementType.FIELD
@Order使用与Aop多切面执行顺序
@Order:设置该类在spring容器中的加载顺序, 越小越早优先加载
多个Aop是可以切同一点的, 比如, 想把@ApiOperation(Swag注解的)地方再自定义增强一下, 比如 持久化一行操作日志到数据库, 那就可以自定义一个注解, 切同一个位置, * 自己想干的事.
那多个Aop的优先顺序(默认按切面工具类的名称首字母a-z执行顺序, 也就是spring默认的加载顺序), 可以使用@order自己定义顺序,
值得注意的是:
环绕前置(即point.proceed()前面的代码)
环绕后置(即point.proceed()后面的代码)
try{
try{
doBefore();//对应@Before注解的方法切面逻辑
method.invoke();
}finally{
doAfter();//对应@After注解的方法切面逻辑
}
doAfterReturning();//对应@AfterReturning注解的方法切面逻辑
//在
}catch(Exception e){
doAfterThrowing();//对应@AfterThrowing注解的方法切面逻辑
}
另外, 如果情况是允许耦合的, 可以创建新注解继承原注解, 或这继承多个原注解, 这样就自定义扩展并组合注解了
todo:@AfterReturning的使用
来源:https://blog.csdn.net/l718161567/article/details/74912424


猜你喜欢
- C#连接本地.mdf文件:项目中右键点击,新增——数据——基于服务的数据库,项目下直接生成.mdf数据库文件,后台(数据库的写入用参数传递)
- 一、背景在Web应用开发中,经常需要使用图表来展示数据,而Echarts是一个非常优秀的图表库。SpringBoot是一个非常流行的Java
- 在开发中常常使用到刷新分页,这里实现一个 RecyclerView 的简单的刷新分页操作,测试效果见文末,实现过程参考如下:实现思路加载更多
- 对于某些程序,我们只允许它使用某些特定端口、网络类型或者特定IP类型等信息。这时候,需要使用到防火墙里面的“高级设置”,创建某些特定的入站或
- 目录前言开始总结前言小伙伴们都知道,现在市面上最流行的web开发框架就是springboot了,在springboot开始流行之前,我们都用
- 由于工作中 使用 MultipartFile 与现有的一些上传文件组件冲突所以使用其他的接收上传文件的方法.首先我把 M
- 前言上一篇:微服务网关Zuul上文中,我们介绍了微服务网关Zuul,Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 S
- 扩展:由于server端是存储了所有server与client的连接对象,因此我们是可以基于此demo的基础上实现聊天系统:* 每当一个与用
- 实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。为了解决这样的问题,spring Boot 为我们提供了一个
- 修改\packages\apps\Camera\res\values\arrays.xml中的以下代码: <string-array
- 1)1、1、2、3、5、8.......用递归算法求第30位数的值?首先我们能够发现从第3位数起后一位数等于前两位数值之和,即:x=(x-1
- 前言:项目是使用Java swing开发,可实现基础数据维护用户登录、系统首页酒店信息管理、主要模块是开房管理、退房管理、房间信息管理、顾客
- 自定义starterSpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进 starter,应用
- 一、模糊查询的几种实现方式1.concat函数和#{}拼接的方式student_name like concat('%',#
- 最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一下关于贴上关于实现服务端(Spring Boot)
- Java空字符串与null的区别:1、类型 null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a =
- 日志是非常重要的,虽然他不会以需求功能提来,但也不会体现在产品方案中。但是,它在系统项目中却占有巨大的地位。为了保证服务的高可用,发现问题一
- 本文实例讲述了WPF中的ListBox实现按块显示元素的方法。分享给大家供大家参考,具体如下:注意:需要设置ListBox的属性 Scrol
- 现在有一张订单表t_stockorder,其拥有id、code、client_id、merchandise_id、merchandise_n
- 1 前言前文已经讲述了Spring BeanFactory 与 FactoryBean 的区别详情,