这是一个springBoot1.5.22项目。我有3个java配置Bean,使用@Configuration
和@Bean
注释。
当我尝试以 Debug模式运行项目时。为什么执行ConfigurationC
的myBean
方法?,ConfigurationA
的myBean
方法> 和 ConfigurationB
不执行。机制是什么?
packages of the classes
start class
@Configuration
public class ConfigurationA {
@Bean
public MyBean myBean(){
System.out.println("ConfigurationA myBean init");
return new MyBean();
}
}
@Configuration
public class ConfigurationB {
@Bean
public MyBean myBean(){
System.out.println("ConfigurationB myBean init");
return new MyBean();
}
}
@Configuration
public class ConfigurationC {
@Bean
public MyBean myBean(){
System.out.println("ConfigurationC myBean init");
return new MyBean();
}
}
最佳答案
就像 @jackycflau 在上面的评论中所说,你所有的 beans 都有相同的名称。
这三个 bean 都具有相同的名称和类型,正在按顺序加载(但尚未初始化)到应用程序上下文(bean 容器)中。当从应用程序上下文返回类型为 MyBean
的名为“myBean”的 bean 时,您会从 ConfigurationC
获取该 bean,因为它是最后一个写入容器的 bean,从而覆盖了前两个具有相同名称/类型的 bean。显然,直到客户端代码实际从容器中提取它时,它才被初始化,这就是为什么它是唯一一个代码实际运行的原因。
关于java - @Configuration & @Bean 多个可注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59387081/