依赖注入面试题分析—Spring面经系列(一)

目录

[1 .Spring 框架提供了哪几种依赖注入类型,推荐使用哪种注入类型?](#1 .Spring 框架提供了哪几种依赖注入类型,推荐使用哪种注入类型?)

[2 .Spring 中 Bean 的作用域有哪些,如何正确选择作用域?](#2 .Spring 中 Bean 的作用域有哪些,如何正确选择作用域?)

[3 .如果针对某个接口你需要提供多个实现类,但又希望它们都能够被注入到 Spring IoC 容器中,你有什么办法?](#3 .如果针对某个接口你需要提供多个实现类,但又希望它们都能够被注入到 Spring IoC 容器中,你有什么办法?)

[4 .如果想要加快 Spring IoC 容器的启动时间,你有什么办法?](#4 .如果想要加快 Spring IoC 容器的启动时间,你有什么办法?)

[5.Spring Bean 的注册流程是怎么样的?](#5.Spring Bean 的注册流程是怎么样的?)

[6.Spring Bean 的实例化过程包含哪些核心步骤?](#6.Spring Bean 的实例化过程包含哪些核心步骤?)

[7 .Spring 如何解决循环依赖问题?](#7 .Spring 如何解决循环依赖问题?)

[8 .如果业务代码出现了循环依赖,有哪些应对的解决方案?](#8 .如果业务代码出现了循环依赖,有哪些应对的解决方案?)


1 .Spring 框架提供了哪几种依赖注入类型,推荐使用哪种注入类型?

答案: Spring 框架分别提供了基于字段、构造器和 Setter 方法的这三种依赖注入类型,
其中, Spring 官方推荐使用的是构造器注入类型。

2 .Spring 中 Bean 的作用域有哪些,如何正确选择作用域?

答案: Spring 中 Bean 的作用域常见的有单例和原型两种,默认是单例。在选择作用域
时,基本原则就是对于有状态的 Bean ,我们应该使用原型作用域,反之则应该使用单例作
用域。

3 .如果针对某个接口你需要提供多个实现类,但又希望它们都能够被注入到 Spring IoC 容器中,你有什么办法?

答案:默认情况下, Spring IoC 容器在启动时不允许某个接口存在多个实现类,但我们
可以通过 @Primary 注解来设置主实现类。另一方面,我们还可以使用 @Qualifier 注解来为
不同的实现类进行命名,从而根据不同的名称来注入目标对象

4 .如果想要加快 Spring IoC 容器的启动时间,你有什么办法?

答案:针对这个问题,基本思想就是减少容器启动时所需要初始化的 Bean 的数量。我
们可以从三个方面来回答这个问题,首先通过 @ComponentScan 注解来控制组件扫描的范围,
然后通过合理设置 Bean 的作用域来降低大对象的创建成本。最后,我们还可以使用延迟加
载机制来控制 Bean 的初始化时机。

5.Spring Bean 的注册流程是怎么样的?

答案: Bean 的注册流程主要围绕 BeanDefinition 对象展开,包含构建 BeanDefinition 、
设置 BeanDefinition 属性以及注册 BeanDefinition 等步骤。这个流程中涉及到
ApplicationContext 和 BeanFactory 这两个 Spring IoC 容器中核心组件之间的协作和交互。

6.Spring Bean 的实例化过程包含哪些核心步骤?

答案: Spring 中 Bean 的实例化过程包含三大步骤,即基于构造器的反射方法创建 Bean 、
通过属性注入实例化 Bean ,以及通过回调机制扩展 Bean 。 Bean 的分阶段实例化过程对于解
决循环依赖也有紧密关联。

7 .Spring 如何解决循环依赖问题?

答案:三级缓存机制是 Spring 用来解决循环依赖问题的基本方法。结合 Bean 实例化的
生命周期,需要理解这种方法无法解决基于构造器注入的循环依赖,而只能应用于 Setter 注
入的应用场景。

8 .如果业务代码出现了循环依赖,有哪些应对的解决方案?

答案:消除循环依赖的策略有很多,其中通过调整类与类之间的协作关系可以很好地把
循环依赖调整为间接依赖。在日常开发过程中,提取中介者、转移业务逻辑以及引入回调机
制都是非常常见的解决方案。通常,这些方案能够运作的前提还是合理的提取业务接口,并
通过 Spring 的依赖注入完成对这些类的有效管理。
下篇更新:AOP 面试题分析---Spring面经系列(二)

相关推荐
lee_curry6 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
九转成圣7 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
直奔標竿8 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵8 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
野生技术架构师10 小时前
金三银四面试总结篇,汇总 Java 面试突击班后的面试小册
java·面试·职场和发展
小袁拒绝摆烂11 小时前
多表关联大平层转JSON树形结构
java·json
ja哇11 小时前
大厂面试高频八股
java·面试·职场和发展
yoyo_zzm12 小时前
Laravel6.x新特性全解析
java·spring boot·后端
Nick_zcy12 小时前
小说在线阅读网站和小说管理系统 · 功能全解析
java·后端·python·springboot·ruoyi