Spring Boot如果存在自动装配bean和自定义bean两个同样类型的bean注入不报错?

比如, 我在导入的Druid依赖后 Spring boot自动装配 在容器中注入的bean

然后 我自定义注入了一个bean
1671013693531.png

此时容器中应该存在两个DruiDataSource类型的bean

我getBean按照类型获取,存在两个类型相同的bean为什么不会报错?

1671013816794.png

比较疑惑,有没有大佬解答

阅读 2.1k
1 个回答

因为你在说我在导入的Druid依赖后 Spring boot自动装配 在容器中注入的bean,所以默认你使用的是druid-spring-boot-starter

然后,https://github.com/alibaba/druid/blob/master/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.java源码这里

public class DruidDataSourceAutoConfigure {
    private static final Logger LOGGER = LoggerFactory.getLogger(DruidDataSourceAutoConfigure.class);

    @Bean(initMethod = "init")
    @ConditionalOnMissingBean
    public DataSource dataSource() {
        LOGGER.info("Init DruidDataSource");
        return new DruidDataSourceWrapper();
    }
}

@ConditionalOnMissingBean 只有你未设置DataSource时才会生效。

所以,你说的此时容器中应该存在两个DruiDataSource类型的bean是错误的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏