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 如何解决注入冲突?
⭐ 标准回答
可以通过以下方式解决:
- 使用
@Primary指定默认实现- 使用
@Qualifier精确指定 Bean 名称- 直接按具体实现类类型注入(不推荐)
⭐ 关键词
- 多实现
- 冲突
- 精确注入
题目 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。