java - @Configuration & @Bean 多个可注入(inject)

标签 java spring spring-boot

这是一个springBoot1.5.22项目。我有3个java配置Bean,使用@Configuration@Bean注释。 当我尝试以 Debug模式运行项目时。为什么执行ConfigurationCmyBean方法?,ConfigurationAmyBean方法> 和 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/

相关文章:

java - 在 Spring Boot 中转换为 Collection 时如何防止 Spring MVC 解释逗号?

java - 简单单例 EJB 示例

java - 如何在 Java 的 Native HTTP Client 上使用代理密码身份验证

java - 将电子邮件发件人 bean Autowiring 到另一个 bean 中?

spring - 使用 RedisQueueInboundGateway 进行多线程处理

java - Spring Hibernate MySQL- 50k 插入耗时 20 分钟

java - jQuery 无法访问 java webservice

java - 比较整数集合

java - 我如何从 keystore 中获取 secret ?

java - 带有 Zuul 的 Spring Boot 2.4.2 网关 API