温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

注解@Order怎么使用

发布时间:2021-12-23 11:30:30 来源:亿速云 阅读:669 作者:iii 栏目:大数据

这篇文章主要介绍“注解@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 业精于勤,荒于嬉;行成于思,毁于随。
 */
@Configuration
public 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 业精于勤,荒于嬉;行成于思,毁于随。
 */
@Component
public class AnoBean {

    public AnoBean(List<IBean> 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怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节
推荐阅读:
  1. ORDER BY分类
  2. thinkphp-order

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI