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

网友投稿 466 2022-08-28


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

目录@Order控制配置类/AOP/方法/字段的加载顺序1.AOP加载顺序2.配置类加载顺序@Order使用与Aop多切面执行顺序

@Order控制配置类/AOP/方法/字段的http://加载顺序

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.MAhttp://X_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注解的方法切面逻辑

wszKu //在

}catch(Exception e){

doAfterThrowing();//对应@AfterThrowing注解的方法切面逻辑

}

另外, 如果情况是允许耦合的, 可以创建新注解继承原注解, 或这继承多个原注解, 这样就自定义扩展并组合注解了

todo:@AfterReturning的使用


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python之下划线的命名规则以及作用(python变量命名可以下划线开头吗)
下一篇:python标准库之functools模块(Python functools)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~