You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring会注入@Configuration类提供的Bean吗?属于哪种依赖注入?

Spring依赖注入问题解答

注入是否成功

DataService的构造器可以正常完成依赖注入。顺带提一句你贴的配置类代码有个笔误:readings.put("1", new Data())这里变量名写错了,应该是dataMap.put("1", new Data()),修正后代码可以正常运行。
你给出的配置类代码如下:

@Bean
public Map<String, List<Data>> data() {
    final Map<String, List<Data>> dataMap = new HashMap<>();
    // 原代码笔误:readings应为dataMap
    dataMap.put("1", new Data());
    return dataMap;
}

对应的DataService类代码如下:

@Service
public class DataService {

    private final Map<String, List<Data>> information;

    public DataService(Map<String, List<Data>> information) {
        this.information = information;
    }
}

所属注入类型

这属于构造器自动注入,是Spring 4.3版本之后新增的默认规则:被Spring管理的类(比如加了@Service的类)如果只声明了一个有参构造方法,不需要额外在构造方法上加@Autowired注解,Spring会自动对这个构造方法的参数执行依赖注入。

匹配规则说明

这个场景确实是按类型(by type)注入,和参数名、Bean名称是否一致完全无关:

  • 你通过@Bean注解声明的Bean,本身类型就是Map<String, List<Data>>,和构造器入参的类型完全匹配,Spring会直接找到这个类型对应的Bean完成注入,不会关心构造器参数叫information还是其他名字,也不关心@Bean对应的方法名是data还是其他值。
  • 这里要注意和Spring内置的集合特殊注入规则区分:如果你没有显式定义Map<String, List<Data>>类型的Bean,当注入目标是Map<String, X>格式时,Spring会默认把容器中所有X类型的Bean收集起来,以Bean名为key、Bean实例为value组装成Map注入。但你这里已经显式定义了类型完全匹配的Map Bean,显式定义的Bean优先级更高,不会触发上述的自动组装集合逻辑。

内容的提问来源于stack exchange,提问作者user3310115

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:00:59