使用@Order控制配置类/AOP/方法/字段的加载顺序详解
作者:公瑾子敬 时间:2023-09-05 17:34:35
@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
标签:@Order,配置类,AOP,方法,字段,加载顺序
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java实现发红包功能
2023-12-09 10:33:03
在C#中使用Channels的完整教程
2021-11-03 15:41:28
Spring中的事务隔离级别和传播行为
2022-07-21 18:18:24
![](https://img.aspxhome.com/file/2023/5/86775_0s.png)
详解LeakCanary分析内存泄露如何实现
2022-12-03 22:04:40
![](https://img.aspxhome.com/file/2023/3/105983_0s.png)
Android利用Espresso进行UI自动化测试的方法详解
2021-09-04 08:02:51
![](https://img.aspxhome.com/file/2023/7/139237_0s.jpg)
mybatis的插件机制示例详解
2023-02-24 23:46:17
Java 语言实现清除带 html 标签的内容方法
2021-07-29 23:47:43
Java调用windows系统的CMD命令并启动新程序
2021-11-27 17:09:13
Android实现淘宝客户端倒计时界面
2023-09-18 21:25:09
![](https://img.aspxhome.com/file/2023/9/93309_0s.gif)
解决@PathVariable对于特殊字符截断的问题
2021-10-10 08:19:40
SpringBoot统一返回JSON格式实现方法详解
2021-10-03 20:22:52
分析ABA问题的本质及其解决办法
2021-12-20 13:59:26
Android应用内悬浮窗的实现方案示例
2022-05-07 20:29:24
![](https://img.aspxhome.com/file/2023/3/139173_0s.gif)
对比Java中的Comparable排序接口和Comparator比较器接口
2023-10-29 04:29:51
Spring Boot项目使用Flyway的详细教程
2021-12-19 12:05:58
![](https://img.aspxhome.com/file/2023/5/70305_0s.png)
剑指Offer之Java算法习题精讲链表与字符串及数组
2022-10-03 19:10:17
![](https://img.aspxhome.com/file/2023/2/62732_0s.png)
java实现http的Post、Get、代理访问请求
2021-10-30 08:13:47
java9开始——接口中可以定义private私有方法
2023-03-27 06:53:15
![](https://img.aspxhome.com/file/2023/1/66981_0s.png)
java.exe和javaw.exe的区别及使用方法
2022-08-27 10:03:39
![](https://img.aspxhome.com/file/2023/0/113250_0s.png)
java实现在线预览--poi实现word、excel、ppt转html的方法
2022-09-29 20:29:41