注解@Order怎么使用
这篇文章主要介绍“注解@Order怎么使用”,在日常操作中,相信很多人在注解@Order怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”注解@Order怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
10年积累的成都网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有迁西免费网站建设让你可以放心的选择与我们合作。
@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(ListanoBeanList) { 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怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
当前文章:注解@Order怎么使用
本文地址:http://pwwzsj.com/article/gjogoi.html