springboot版本:1.3.5
示例代码如下:
@Configuration @Order(3) public class Conf1 { @Bean public Runnable createRunnable1() { System.out.println("111"); return () -> {}; } }
@Configuration @Order(2) public class Conf2 { @Bean public Runnable createRunnable2() { System.out.println("222"); return () -> {}; } }
运行方式:
import org.springframework.boot.SpringApplication; @SpringBootApplication public class App6 { public static void main(String[] args) { SpringApplication.run(App6.class, args); } }按照Order的效果,数字越小,越先初始化
但是,实际上先输出111,再输出了222
两个Order的数字怎么调整,都无效
请问,哪里有问题
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Spring Boot 1.3.5版本中,你使用的@Order
注解可能没有达到预期效果,因为这个注解主要用于排序那些实现了Ordered
接口或者被@Component
、@Service
等注解标记的bean。然而,在你的场景中,你是直接在配置类(@Configuration
)上使用了@Order
来试图控制bean初始化的顺序。
实际上,对于通过@Bean
方法定义的bean,Spring Framework并没有直接提供基于@Order
的排序机制。@Order
在这里可能不会直接影响到bean的初始化顺序,它更多地应用于如过滤器链(Filter)、拦截器(Interceptor)等场景中的组件排序。
如果你希望控制@Bean
方法创建的bean的初始化顺序,可以考虑以下几种方式:
@DependsOn
注解:你可以让一个bean依赖于另一个bean,这样依赖的bean会先初始化。例如,在需要后初始化的bean上添加@DependsOn("createRunnable1")
。@Configuration
public class Conf2 {
@Bean
@DependsOn("createRunnable1")
public Runnable createRunnable2() {
System.out.println("222");
return () -> {};
}
}
@Configuration
public class Conf1 {
@Bean
public Runnable createRunnable1() {
System.out.println("111");
return () -> {};
}
}
@Configuration
public class Conf2 {
@Autowired
private Conf1 conf1;
@Bean
public Runnable createRunnable2() {
conf1.createRunnable1(); // 显式调用以确保顺序
System.out.println("222");
return () -> {};
}
}
请注意,这些方法都是为了适应特定需求而采取的变通方案。在设计应用时,通常建议减少对bean初始化顺序的硬性依赖,转而通过良好的设计和依赖注入来管理组件之间的关系。