溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

注解@Order怎么使用

發(fā)布時(shí)間:2021-12-23 11:30:30 來源:億速云 閱讀:667 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“注解@Order怎么使用”,在日常操作中,相信很多人在注解@Order怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”注解@Order怎么使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

@Order

最開始 Order 注解用于切面的優(yōu)先級(jí)指定;在 4.0 之后對(duì)它的功能進(jìn)行了增強(qiáng),支持集合的注入時(shí),指定集合中 bean 的順序,并且特別指出了,它對(duì)于單實(shí)例的 bean 之間的順序,沒有任何影響。

注解@Order或者接口Ordered的作用是定義Spring IOC容器中Bean的執(zhí)行順序的優(yōu)先級(jí),而不是定義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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Component
@Order(1)
public class OrderB {

    public OrderB() {
        System.out.println("************ B ************");
    }

}

啟動(dòng)服務(wù)輸出:
************ A ************
************ B ************

總結(jié):B服務(wù)的order是1,A服務(wù)的order是2,按照order越小的優(yōu)先級(jí)越高,但是結(jié)果輸出的卻是A服務(wù),所以結(jié)論是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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Configuration
public class OrderBeanConfig {

    @Order(2)
    @Bean
    public OrderC orderC() {
        return new OrderC();
    }

    @Order(1)
    @Bean
    public OrderD orderD() {
        return new OrderD();
    }
}

啟動(dòng)服務(wù):
************ C ************
************ D ************

總結(jié):D服務(wù)的order是1,B服務(wù)的order是2,按照order越小的優(yōu)先級(jí)越高,但是結(jié)果輸出的卻是C服務(wù),所以結(jié)論是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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Configuration
@Order(2)
public class BeanConfigB {
    public BeanConfigB() {
        System.out.println("************ Config B ************");
    }
}


啟動(dòng)服務(wù):
************ Config A ************
************ Config B ************

結(jié)論: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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Configuration
@AutoConfigureOrder(value = 2)
public class AutoConfigureOrderB {

    public AutoConfigureOrderB() {
        System.out.println("************ AutoConfigureOrder B ************");
    }
}


啟動(dòng)服務(wù):
************ 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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@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 業(yè)精于勤,荒于嬉;行成于思,毀于隨。
 */
@Configuration
@AutoConfigureOrder(value = 2)
public class AutoConfigureOrderD {

    @Bean
    public DemoB demoB() {
        return new DemoB();
    }
}


啟動(dòng)服務(wù):
************ Demo A ************
************ Demo C ************
************ Demo B ************

結(jié)論:@AutoConfigureOrder這個(gè)注解并不能指定配置類的順序

2. @AutoConfigureOrder正確使用

@AutoConfigureOrder適用于外部依賴的包中 AutoConfig 的順序,而不能用來指定本包內(nèi)的順序。

@Order&@AutoConfigureOrder總結(jié)

  • @Order注解不能指定 bean 的加載順序,它適用于 AOP 的優(yōu)先級(jí),以及將多個(gè) Bean 注入到集合時(shí),這些 bean 在集合中的順序

  • @AutoConfigureOrder指定外部依賴的 AutoConfig 的加載順序(即定義在/META-INF/spring.factories文件中的配置 bean 優(yōu)先級(jí)),在當(dāng)前工程中使用這個(gè)注解并沒有什么用

  • 同樣的 @AutoConfigureBefore和 @AutoConfigureAfter這兩個(gè)注解的適用范圍和@AutoConfigureOrder一樣

到此,關(guān)于“注解@Order怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)
推薦閱讀:
  1. ORDER BY分類
  2. thinkphp-order

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI