java面试:Spring是如何解决循环依赖问题的

Spring作为java开发的基础应用框架,能够解决许多的在开发当中存在的问题,而循环依赖就是其中一个,为了考察面试者技术的深度和能力的高低,因此这个问题在spring的面试当中是属于相当核心的,今天小编就和大家来分享一下这一块的知识。

1.什么是循环依赖

循环依赖是指一个或多个Bean之间存在的一个直接或者间接的依赖关系,构成一个循环调用,通常表现为三种形态,分别是互相依赖,间接依赖,自我依赖。

2.解决循环依赖的方法

Spring本身也考虑了这方面的问题,所以设计了三级缓存来解决这方面的问题,所谓三级缓存,就是用来存放不同类型的bean,一级缓存放的是完全初始化好的Bean可以直接使用,二级缓存存放的是最原始的Bean对象(Bean的属性还没有进行赋值或依赖注入),三级缓存存放的是Bean工厂的一个对象,用于生成原始的Bean对象并且放入到二级缓存当中,将Bean的实例化和属性依赖注入两个步骤分离了出来。

不过Spring的三级缓存只能解决单实例的循环依赖问题,还有四种情况需要我们去人为干预。

1.多实例的Setter注入导致的循环依赖,需要把Bean改成单例。

2.构造器注入导致的循环依赖问题,可通过@Lazy懒加载去解决。

3.DependsON导致的循环依赖,找到注解循环依赖的地方,迫使其停止。

4.单例的代理对象Setter注入导致的循环依赖。

可以使用@Lazy注解。

或者使用@DependsOn注解指定加载先后关系。

今天的分享就到这里了,希望这篇博客能给你一些帮助,让你对关于有了解过Spring是如何解决循环依赖的问题得到进一步的提升,在面试的时候能从容面对面试官。

相关推荐
金銀銅鐵15 分钟前
[Java] 如何理解 class 文件中字段的 access flags?
java·后端
小短腿的代码世界23 分钟前
Qt国际化深度解析:从源码到企业级多语言实践
java·数据库·qt
凌冰_33 分钟前
IDEA 集成Claude Code
java·ide
SXJR35 分钟前
Java中的Cross-Encoder模型解决方案
java·开发语言
彦为君44 分钟前
JavaSE-11-BIO/NIO/AIO(多人聊天室)
java·开发语言·python·ai·nio
Cosolar1 小时前
收藏备用!2026 年所有主流 RAG 开源项目都在这里了
人工智能·面试·llm
计算机安禾1 小时前
【c++面向对象编程】第43篇:可变参数模板(C++11):优雅处理不定长参数
java·开发语言·c++
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第69题】【JVM篇】第29题:GC Roots 有哪些?
java·开发语言·jvm·面试
William Dawson1 小时前
【通俗易懂!Spring四大核心注解源码解读:@Configuration、@ComponentScan、@Import、@EnableXXX实战】
java·后端·spring
Tigshop开源商城1 小时前
Tigshop 开源商城系统 JAVA v5.8.28 版本发布|『角色权限管理+店铺后台跳转逻辑』优化
java·开源商城系统·tigshop