Spring面试题, 什么是循环依赖常问?
Spring面试题, 什么是循环依赖常问?
QA
Step 1
Q:: 什么是循环依赖?
A:: 循环依赖是指在两个或多个 Bean 之间存在相互依赖的情况。例如,Bean A 依赖于 Bean B,而 Bean B 又依赖于 Bean A。在 Spring 中,如果不加以处理,循环依赖会导致 StackOverflowError 或无法正常初始化 Bean。Spring 通过三级缓存机制(SingletonFactories, EarlySingletons,
Singletons)来解决大部分循环依赖问题。
Step 2
Q:: Spring 如何解决循环依赖?
A:: Spring 通过三级缓存机制来解决循环依赖问题。一级缓存(Singletons)存储完全初始化的单例对象,二级缓存(EarlySingletons)存储早期暴露的单例对象,三级缓存(SingletonFactories)存储可以生成单例对象的工厂。在创建一个单例 Bean 时,首先会将它的工厂放入三级缓存,然后尝试实例化它的依赖对象。如果依赖对象也依赖于它,就会从三级缓存中获取早期暴露的单例对象,避免循环依赖问题。
Step 3
Q:: 什么是三级缓存机制?
A:: 三级缓存机制是 Spring 用来解决循环依赖问题的一种方法。一级缓存是单例缓存(Singletons),存储完全初始化的单例对象;二级缓存是早期单例缓存(EarlySingletons),存储部分初始化但尚未完全初始化的单例对象;三级缓存是单例工厂缓存(SingletonFactories),存储用于创建单例对象的工厂。通过这三级缓存,Spring 能够在创建 Bean 的过程中解决循环依赖问题。
用途
在实际生产环境中,循环依赖可能会导致应用程序无法正常启动或运行,特别是在依赖复杂且 Bean 数量众多的情况下。了解和解决循环依赖问题对于确保 Spring 应用程序的稳定性和可维护性至关重要。面试中常问这个问题是为了评估候选人对 Spring 框架的深入理解,以及处理复杂依赖关系的能力。\n相关问题
🦆
Spring 中的 Bean 生命周期是什么样的?▷
🦆
什么是 Spring 中的依赖注入DI?▷
🦆
什么是 Spring 的 IoC 容器?▷
🦆
什么是 Spring 中的 AOP?▷