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

相关推荐
毕设源码-朱学姐14 分钟前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
C雨后彩虹2 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
sww_10262 小时前
RAG检索增强 ETL最佳实战
人工智能·python·spring
java1234_小锋3 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
2501_944525543 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
计算机学姐3 小时前
基于SpringBoot的电影点评交流平台【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·spring·信息可视化·echarts·推荐算法
Filotimo_3 小时前
Tomcat的概念
java·tomcat
索荣荣4 小时前
Java Session 全面指南:原理、应用与实践(含 Spring Boot 实战)
java·spring boot·后端
Amumu121384 小时前
Vue Router(二)
java·前端