我正在尝试通过示例了解 @ConditionalOnBean ,并遇到了这样一种情况,即条件Bean在依赖它的Bean之前被初始化。下面是我的示例,
主类
@SpringBootApplication
@ComponentScan
public class MainConditionalOnBean {
public static void main(String[] args) {
SpringApplication.run(MainConditionalOnBean.class, args);
}
}
A级
@Component
public class A {
@PostConstruct
public void loadA() {
System.out.println("Loading A");
}
@Bean
public B getB() {
System.out.println("Loading B from A");
return new B();
}
}
B级
public class B {
@PostConstruct
public void loadB() {
System.out.println("Loading B");
}
}
C类
@Configuration
@ConditionalOnBean(B.class)
public class C {
@PostConstruct
public void loadC() {
System.out.println("Loading C");
}
}
OutPut
Loading A
Loading C
Loading B from A
Loading B
我不明白为什么C在B之前加载,因为C依赖于B本身。
按照Wiki中的定义
仅当满足所有指定要求的bean已包含在BeanFactory中时,才匹配条件。
我不知道bean工厂如何包含尚未初始化的bean。
请,有人可以解释吗?
答案 0 :(得分:0)
您是否在课程@Configuration
上添加了@Component
或B
。有问题,我看不到任何此类注释。