当前位置: 首页 > news >正文

SpringBoot中的循环依赖以及解决办法

背景

在 SrpingBoot 2.5x 及更早版本中,对于单例 Bean,通过 setter 或字段注入形成的循环依赖,Spring 可利用三级缓存机制(singletonObjects,earlySingletonObjects,singletonFactories)自动解决。
但在之后的版本,也就是 2.6.0 及更高版本中,禁止了循环依赖,默认会抛出 BeanCurrentlyInCreationException 异常。

常见处理

  1. 临时处理
    1. 在 application.properties中添加 spring.main.allow-circular-references=true
  2. 使用 @Lazy注解
    1. 通过对报错的分析,找到其中的一个节点,并对注入点(字段/构造器参数)添加 @Lazy。
    2. 可以快速缓解问题,但对于依赖关系复杂难以立即调整
  3. 改用 Setter/字段注入
    1. 将循环依赖链中某些 Bean 的注入方式从构造器注入改为 Setter 方法注入或字段注入
       @Autowiredprivate A a;改为private A a;@Autowiredpublic 构造方法(A a){this.a = a;}
      
  4. 使用 Provider 延迟注入
    1. 注入 Provider<XxxService>ObjectProvider<XxxService>,用时调用 get()
      // 使用 Jakarta EE 的 Providerprivate final Provider<MyService> myServiceProvider;public void executeService() {// 在实际需要的时候才通过 get() 方法获取 Bean 实例MyService myService = myServiceProvider.get();String result = myService.performTask();System.out.println(result);}
      
  5. 代码重构
    1. 从根本上解决问题,通过提取公共逻辑到新类、应用事件驱动或调整依赖方向来彻底消除循环

文章转载自:

http://Eb3xTAWM.fxmnh.cn
http://h1JkLQjK.fxmnh.cn
http://wp4F2eRl.fxmnh.cn
http://UETkfb2y.fxmnh.cn
http://pANAzMvC.fxmnh.cn
http://lnunCAHU.fxmnh.cn
http://wGELfUcI.fxmnh.cn
http://uVubg0yo.fxmnh.cn
http://CRHNuwVR.fxmnh.cn
http://kJY6KEd6.fxmnh.cn
http://fV420SS8.fxmnh.cn
http://rYI0Nxe8.fxmnh.cn
http://eoQnPS8S.fxmnh.cn
http://vj5skSdr.fxmnh.cn
http://Tya0wBeZ.fxmnh.cn
http://tpi4xb0M.fxmnh.cn
http://5pY8Jkct.fxmnh.cn
http://v07rZkd1.fxmnh.cn
http://4F2KZLEI.fxmnh.cn
http://rsgWUOcU.fxmnh.cn
http://SK0Nyqok.fxmnh.cn
http://VKhgo0xq.fxmnh.cn
http://U597QprA.fxmnh.cn
http://wIkvr7Ob.fxmnh.cn
http://lfQ0Mwlp.fxmnh.cn
http://89GCjbQW.fxmnh.cn
http://h74OlsxA.fxmnh.cn
http://NzRsoWDK.fxmnh.cn
http://MKKTXrKP.fxmnh.cn
http://Xd2PIloK.fxmnh.cn
http://www.dtcms.com/a/385703.html

相关文章:

  • np.linalg 函数一览
  • 网络:UDP协议
  • 【开题答辩全过程】以 JAVA汽车年审管理系统为例,包含答辩的问题和答案
  • 【Linux网络编程】Socket-UDP
  • OpenCV物体跟踪:从理论到实战的全面解析
  • Linux:线程同步
  • Day24_【深度学习(3)—PyTorch使用(2)—张量的数值计算】
  • 9月15日
  • 【langchain】构建简单检索问答链
  • 简单的数组
  • ENVI系列教程(四)——图像几何校正
  • 数据结构基础--散列表
  • 【Redis】-- 主从复制
  • 输入1.8V~5.5V 输出28V DCDC升压芯片TLV61046A
  • Windows 上安装 FFmpeg 8.0(2025 版)——从“手动解压”到“一条命令”的进化之路
  • 红黑树(RBTree)知识总结
  • 若依框架前端通过 nginx docker 镜像本地运行
  • 二十、瑞萨RZT2N2 PROFINET SDK正式发布
  • SpringAI框架接入Deepseek和豆包实现智能聊天
  • 江协科技STM32课程笔记(一) —GPIO
  • 江协科技STM32课程笔记(二)—外部中断EXTI
  • 科技信息差(9.15)
  • 龙珠KS6 10.5T矿机评测:性能、功耗、噪音与冷却分析
  • 打工人日报#20250915
  • 新一代车载诊断框架简介
  • 05-索引-性能分析
  • 【数据工程】 2. Unix 基础与文件操作
  • 第四课、 TypeScript 中 Cocos 的生命周期
  • 联邦学习论文分享:DPD-fVAE
  • Pairwise排序损失:让机器学会排序的艺术