spring的IoC(控制反转)面试题

Spring IoC 面试题(初级 Java 开发)


题目 1:什么是 Spring 的 IoC?(必考)

⭐ 标准回答

IoC(Inversion of Control,控制反转) 是一种设计思想,

指的是 将对象的创建、依赖关系的管理和生命周期的控制从程序本身转移给 Spring 容器 。

开发者只需要声明依赖关系,不需要手动创建对象。


⭐ 关键词(面试官在听)

  • 控制反转
  • 对象创建交给容器
  • 解耦
  • Spring 容器

题目 2:IoC 和 DI 有什么关系?

⭐ 标准回答

IoC 是一种思想,DI(Dependency Injection,依赖注入)是 IoC 的具体实现方式 。

Spring 通过 DI(如 @Autowired、构造器注入、setter 注入)来实现 IoC。


⭐ 关键词

  • IoC 是思想
  • DI 是实现方式
  • @Autowired

题目 3:Spring 是如何实现 IoC 的?

⭐ 标准回答

Spring 通过 IoC 容器 来实现 IoC。

容器在启动时会扫描带有 @Component、@Service 等注解的类,

将它们注册为 Bean,并在需要时自动创建对象并注入依赖。


⭐ 关键词

  • IoC 容器
  • Bean
  • 组件扫描
  • 自动注入

题目 4:什么是 Bean?Bean 是如何创建的?

⭐ 标准回答

Bean 是由 Spring IoC 容器管理的对象 。

Spring 在启动时会根据配置(注解或 XML)生成 Bean 定义,

对于默认的单例 Bean,会在容器启动时创建实例并放入容器中。


⭐ 关键词

  • Bean
  • 容器管理
  • 单例(singleton)

题目 5:@Autowired 的注入规则是什么?

⭐ 标准回答

@Autowired 默认是 按类型(byType)进行注入 。

如果只有一个匹配的 Bean,则直接注入;

如果有多个实现类,则需要使用 @Primary 或 @Qualifier 来指定。


⭐ 关键词

  • byType
  • @Primary
  • @Qualifier
  • 多实现冲突

题目 6:如果一个接口有多个实现类,Spring 如何解决注入冲突?

⭐ 标准回答

可以通过以下方式解决:

  1. 使用 @Primary 指定默认实现
  2. 使用 @Qualifier 精确指定 Bean 名称
  3. 直接按具体实现类类型注入(不推荐)

⭐ 关键词

  • 多实现
  • 冲突
  • 精确注入

题目 7:Spring 中 Bean 默认是单例还是多例?

⭐ 标准回答

Spring 中 Bean 默认是 单例(singleton) 的,

即在整个 IoC 容器中只存在一个实例。


⭐ 关键词

  • singleton
  • 默认作用域

题目 8:@Autowired 可以用在哪些地方?

⭐ 标准回答

@Autowired 可以用在:

  • 成员变量
  • 构造器
  • setter 方法
    Spring 推荐使用 构造器注入,因为它更安全、依赖更明确。

⭐ 关键词

  • 构造器注入
  • 字段注入
  • setter 注入

题目 9:为什么使用 IoC?有什么好处?

⭐ 标准回答

使用 IoC 可以:

  • 降低模块之间的耦合
  • 提高代码的可扩展性
  • 方便单元测试
  • 统一管理对象生命周期

⭐ 关键词

  • 解耦
  • 可维护
  • 可测试

题目 10(加分题):new 对象和 Spring IoC 有什么区别?

⭐ 标准回答

使用 new 创建对象时,对象的创建和依赖关系由程序员自己控制;

使用 Spring IoC 时,对象由容器创建和管理,依赖通过注入完成,

更符合大型项目的架构设计。



面试速记版(30 秒背诵)

IoC 是控制反转,把对象创建和依赖管理交给 Spring 容器;

DI 是 IoC 的实现方式;

Bean 是由容器管理的对象;
@Autowired 默认按类型注入,多实现用 @Primary 或 @Qualifier。

相关推荐
高频因子挖掘机13 分钟前
量化回测应该保存不复权数据吗?从数据口径到收益计算的工程实践
后端·github·api
高频因子挖掘机1 小时前
实时行情为什么不应该逐只股票请求?批量查询与标的池管理实践
后端·github·api
程序猿DD6 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
蛋蛋的就会顺顺的9 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
余槐i9 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8269 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡9 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
凤山老林10 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne11 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF12 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用