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

相关推荐
IT_陈寒8 小时前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
兔子零10248 小时前
手把手教你在 Claude Code 中接入 DeepSeek-V4
后端
掌心向暖RPA自动化8 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭9 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
phenhorlin9 小时前
我做了个工具,让切换 Homebrew 镜像像切 npm 源一样简单
后端·shell
6959 小时前
两周浅学 RAG
后端
TeamDev9 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手10 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
AI人工智能+电脑小能手10 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
likerhood10 小时前
SLF4J: Failed to load class “StaticLoggerBinder“ 解决
java·log4j·maven