Java面试题更新 2026-08-05

请解释Spring框架中的依赖注入(DI)是什么,并说明其核心概念与作用机制。

后端开发技术原理方案权衡

考察说明

考查对Spring依赖注入基本概念、实现方式及其在解耦方面作用的理解。

回答思路

  1. 【回答框架 1】DI即依赖注入,是Spring实现控制反转(IoC)的核心方式。它指由容器负责创建对象并管理对象间的依赖关系,而非由对象自身通过new等方式主动创建依赖,从而将对象间的耦合从代码内部转移到外部容器配置。
  2. 【回答框架 2】三种主要注入方式:构造器注入、Setter注入和字段注入。构造器注入保证依赖不可变且必填,适合必选依赖;Setter注入允许依赖可选且可在运行时修改;字段注入最简洁但不利于测试和显式依赖表达,常不推荐在强制代码规范中使用。
  3. 【回答框架 3】核心机制是Spring容器通过解析配置元数据(XML、注解或Java配置),在Bean创建时分析其依赖并完成装配。容器生命周期包含实例化、属性填充、初始化和销毁等步骤,DI发生在属性填充阶段。
  4. 【回答框架 4】作用方面,DI降低组件间耦合,提升代码可测试性与可维护性,方便替换实现(如mock对象)和配置不同环境。但也存在容器配置复杂度提升、依赖关系不直观等问题,需配合良好设计。
  5. 【回答框架 5】依赖查找是DI的基础,容器提供getBean方式,但DI是主动由容器注入,两者方向相反。理解DI需掌握Bean作用域(如单例、原型)对依赖实例的影响,避免状态共享或频繁创建问题。
  6. 【关键点 1】DI是Spring实现IoC的核心,由容器注入依赖而非对象自建,以解耦和提升可测试性。
  7. 【关键点 2】三种注入方式中,构造器注入更适合必选依赖,Setter注入适合可选依赖,字段注入简洁但有测试与显式性缺点。
  8. 【关键点 3】容器在Bean生命周期中完成依赖装配,需结合配置元数据解析。
  9. 【关键点 4】依赖查找与DI方向相反:查找是被动获取,DI是主动注入。
  10. 【关键点 5】注意Bean作用域对依赖实例共享或独立的影响,单例默认共享,需避免可变状态污染。
  11. 【易错点 1】循环依赖处理不当会导致Bean创建失败,Spring默认支持单例Setter/字段注入级别,构造器注入循环依赖通常无法解决。
  12. 【易错点 2】字段注入隐藏依赖关系,使类难以独立测试和快速识别所需协作对象,规范上不推荐。
  13. 【易错点 3】依赖过多时接口设计可能违反单一职责,需警惕由DI引发的服务类膨胀与隐式耦合。