千家信息网

注解@Order怎么使用

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要介绍"注解@Order怎么使用",在日常操作中,相信很多人在注解@Order怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"注解@Order怎么使用"
千家信息网最后更新 2025年02月05日注解@Order怎么使用

这篇文章主要介绍"注解@Order怎么使用",在日常操作中,相信很多人在注解@Order怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"注解@Order怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

@Order

最开始 Order 注解用于切面的优先级指定;在 4.0 之后对它的功能进行了增强,支持集合的注入时,指定集合中 bean 的顺序,并且特别指出了,它对于单实例的 bean 之间的顺序,没有任何影响。

注解@Order或者接口Ordered的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响;

1. 类上添加 Order 注解

package com.spring.master.spring.bean.order;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 16:19 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Component@Order(2)public class OrderA {    public OrderA() {        System.out.println("************ A ************");    }}package com.spring.master.spring.bean.order;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 16:19 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Component@Order(1)public class OrderB {    public OrderB() {        System.out.println("************ B ************");    }}启动服务输出:************ A ************************ B ************总结:B服务的order是1,A服务的order是2,按照order越小的优先级越高,但是结果输出的却是A服务,所以结论是order的值不决定bean的初始化顺序。

2. 配置类中 Bean 声明方法上添加Order注解

package com.spring.master.spring.bean.order;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 16:45 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */public class OrderC {    public OrderC() {        System.out.println("************ C ************");    }}package com.spring.master.spring.bean.order;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 16:45 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */public class OrderD {    public OrderD() {        System.out.println("************ D ************");    }}package com.spring.master.spring.bean.order;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.annotation.Order;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 16:46 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configurationpublic class OrderBeanConfig {    @Order(2)    @Bean    public OrderC orderC() {        return new OrderC();    }    @Order(1)    @Bean    public OrderD orderD() {        return new OrderD();    }}启动服务:************ C ************************ D ************总结:D服务的order是1,B服务的order是2,按照order越小的优先级越高,但是结果输出的却是C服务,所以结论是order的值不决定bean的初始化顺序。

3. @Order 注解修饰配置类

package com.spring.master.spring.bean.order;import org.springframework.context.annotation.Configuration;import org.springframework.core.annotation.Order;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:03 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configuration@Order(3)public class BeanConfigA {    public BeanConfigA() {        System.out.println("************ Config A ************");    }}package com.spring.master.spring.bean.order;import org.springframework.context.annotation.Configuration;import org.springframework.core.annotation.Order;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:03 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configuration@Order(2)public class BeanConfigB {    public BeanConfigB() {        System.out.println("************ Config B ************");    }}启动服务:************ Config A ************************ Config B ************结论:order的值不决定配置类的初始化顺序。

4. @Order正确使用

package com.spring.master.spring.bean.order;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:14 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Component@Order(value = 3)public class AnoBeanA implements IBean{    public AnoBeanA() {        System.out.println("************ AnoBean A ************");    }}package com.spring.master.spring.bean.order;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:15 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Component@Order(value = 2)public class AnoBeanB implements IBean{    public AnoBeanB() {        System.out.println("************ AnoBean B ************");    }}package com.spring.master.spring.bean.order;import org.springframework.stereotype.Component;import java.util.ArrayList;import java.util.List;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:17 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Componentpublic class AnoBean {    public AnoBean(List anoBeanList) {        for (IBean bean : anoBeanList) {            System.out.println("in ano testBean: ">

@AutoConfigureOrder

1. 配置类的顺序

package com.spring.master.spring.bean.autoconfigureorder;import org.springframework.boot.autoconfigure.AutoConfigureOrder;import org.springframework.context.annotation.Configuration;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:35 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configuration@AutoConfigureOrder(value = 3)public class AutoConfigureOrderA {    public AutoConfigureOrderA() {        System.out.println("************ AutoConfigureOrder A ************");    }}package com.spring.master.spring.bean.autoconfigureorder;import org.springframework.boot.autoconfigure.AutoConfigureOrder;import org.springframework.context.annotation.Configuration;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:36 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configuration@AutoConfigureOrder(value = 2)public class AutoConfigureOrderB {    public AutoConfigureOrderB() {        System.out.println("************ AutoConfigureOrder B ************");    }}启动服务:************ AutoConfigureOrder A ************************ AutoConfigureOrder B ************

2. Bean的顺序

package com.spring.master.spring.bean.autoconfigureorder;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:41 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */public class DemoA {    public DemoA() {        System.out.println("************ Demo A ************");    }}package com.spring.master.spring.bean.autoconfigureorder;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:42 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */public class DemoB {    public DemoB() {        System.out.println("************ Demo B ************");    }}package com.spring.master.spring.bean.autoconfigureorder;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:42 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */public class DemoC {    public DemoC() {        System.out.println("************ Demo C ************");    }}package com.spring.master.spring.bean.autoconfigureorder;import org.springframework.boot.autoconfigure.AutoConfigureOrder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:43 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configuration@AutoConfigureOrder(value = 3)public class AutoConfigureOrderC {    @Bean    public DemoA demoA() {        return new DemoA();    }    @Bean    public DemoC demoC() {        return new DemoC();    }}package com.spring.master.spring.bean.autoconfigureorder;import org.springframework.boot.autoconfigure.AutoConfigureOrder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 17:44 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configuration@AutoConfigureOrder(value = 2)public class AutoConfigureOrderD {    @Bean    public DemoB demoB() {        return new DemoB();    }}启动服务:************ Demo A ************************ Demo C ************************ Demo B ************结论:@AutoConfigureOrder这个注解并不能指定配置类的顺序

2. @AutoConfigureOrder正确使用

@AutoConfigureOrder适用于外部依赖的包中 AutoConfig 的顺序,而不能用来指定本包内的顺序。

@Order&@AutoConfigureOrder总结

  • @Order注解不能指定 bean 的加载顺序,它适用于 AOP 的优先级,以及将多个 Bean 注入到集合时,这些 bean 在集合中的顺序

  • @AutoConfigureOrder指定外部依赖的 AutoConfig 的加载顺序(即定义在/META-INF/spring.factories文件中的配置 bean 优先级),在当前工程中使用这个注解并没有什么用

  • 同样的 @AutoConfigureBefore@AutoConfigureAfter这两个注解的适用范围和@AutoConfigureOrder一样

到此,关于"注解@Order怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0