您好,登錄后才能下訂單哦!
這篇文章主要介紹“注解@Order怎么使用”,在日常操作中,相信很多人在注解@Order怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”注解@Order怎么使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
最開始 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接口的影響;
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的初始化順序。
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的初始化順序。
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的值不決定配置類的初始化順序。
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: ">
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 ************
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è)注解并不能指定配置類的順序
@AutoConfigureOrder適用于外部依賴的包中 AutoConfig 的順序,而不能用來指定本包內(nèi)的順序。
@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í)用的文章!
免責(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)容。