欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

使用@Order控制配置类/AOP/方法/字段的加载顺序详解

时间:2022-10-31 10:17:59|栏目:JAVA代码|点击:

@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的使用

上一篇:浅谈Java中Lock和Synchronized的区别

栏    目:JAVA代码

下一篇:透明化Sharding-JDBC数据库字段加解密方案

本文标题:使用@Order控制配置类/AOP/方法/字段的加载顺序详解

本文地址:http://www.codeinn.net/misctech/217808.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有