Я пытался понять примеры @ ConditionalOnBean и столкнулся с такой ситуацией, что Условный компонент инициализируется перед компонентом, от которого он зависит. Ниже мой пример,
Основной класс
@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");
}
}
Класс С
@Configuration
@ConditionalOnBean(B.class)
public class C {
@PostConstruct
public void loadC() {
System.out.println("Loading C");
}
}
1026 Мощн * *
Loading A
Loading C
Loading B from A
Loading B
Я не могу понять, почему C загружается до B, поскольку C зависит от самого B.
Согласно определению в вики,
Условно, который соответствует только тогда, когда компоненты, отвечающие всем указанным требованиям, уже содержатся в BeanFactory.
Я не понимаю, как фабрика бобов может содержать бин, который еще не инициализирован.
Пожалуйста, кто-нибудь может объяснить это?