Spring Boot应用程序中是否暗含任何默认的bean初始化顺序?尝试使用@ConditionalOnBean注释时,我在一个Spring Boot应用程序中遇到了这个问题。
起初,我认为当Spring在@Configuration类中加载bean或进行组件扫描以自动注册@ Component / @ Service / ..类时,Spring不保证任何Bean创建顺序。
但是后来,我注意到在Spring documentation中,它提到了这一点,
保证在添加任何用户定义的Bean定义后将加载自动配置类。
这让我感到困惑,
1.什么计算用户定义的bean ,什么计算自动配置类?具体来说,@ Configuration类中的@Bean和直接在类级别上的@ Component / @ Service之间是否有任何加载顺序。
2.如果bean A需要注入依赖于bean B的对象,那么B总是会首先被初始化吗?
3.如果在Spring Boot应用程序中将@Import用于配置聚合,则在组件扫描的bean注册之前,将初始化在导入的配置类中定义的bean。
@Component
public class A {}
@Component
public class B {
@Autowired
private A a;
}
@Configuration
public class externalConfig {
@Bean
public C c() {
return new C();
}
}
@SpringBootApplication
@Import(externalConfig.class)
public class testApplication {
@Bean
public D d() {
return new D();
}
}
在上面的代码示例中,我的问题变为以下内容。
1.没有@ Import,C或D总是在A和B之前初始化吗?
2. B总是会在A之前初始化吗?
3.使用@Import,将始终像在D之前一样先初始化C吗?
答案 0 :(得分:0)
不确定100%,但是:
检查DependsOn批注(enter link description here)。
希望它对您有帮助