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

记录一次出现循环依赖问题

具体的结构设计:
在这里插入图片描述
在上面的图片中:
UnboundBlackVerifyChain类中继承了UnboundChain类。但是UnboundChain类中注入了下面三个类。
@Scope(“prototype”)
UnboundLinkFlowCheck类

@Scope(“prototype”)
UnboundUserNameCheck类

@Scope(“prototype”)
UnboundIdCardCheck类
这三个类都是原型的且都注入了DeconstructionService类。

但是DeconstructionService类中又注入了UnboundBlackVerifyChain类。那么就形成了循环依赖了。

在Spring框架中,当两个bean相互依赖时,可能会出现循环依赖问题。Spring可以处理某些情况下的循环依赖,但其处理能力取决于bean的作用域(scope)。

单例作用域(Singleton Scope)
对于默认的单例作用域,Spring能够通过三级缓存机制处理循环依赖。Spring会在创建bean的过程中,将尚未完全初始化的bean实例暴露在一个早期引用的缓存中,这样其他bean在依赖时可以引用到这个早期的实例。

原型作用域(Prototype Scope)
对于原型作用域,情况就不同了。Spring不支持原型作用域下的循环依赖。原因是原型bean在每次请求时都会创建一个新的实例,Spring无法像处理单例bean那样在创建过程中缓存和注入未完全初始化的bean实例。

因此,当A模块和B模块都配置为原型作用域并且相互依赖时,Spring会在尝试创建bean时抛出一个BeanCurrentlyInCreationException,因为它无法解决这种循环依赖。


http://www.kler.cn/news/330480.html

相关文章:

  • 【Linux私房菜(九)之进程间通信】
  • Spring 源码部分接口实践
  • VMware ESXi 6.7U3u macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025
  • Label-Studio ML利用yolov8模型实现自动标注
  • Pytorch实现玉米基因表达量预测模型
  • Efficient Knowledge Infusion via KG-LLM Alignment
  • 【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}
  • unix中的exec族函数介绍
  • 生信初学者教程(二十三):REF+SVM筛选候选标记物
  • 解决iPhone无法有效响应问题的指南
  • WPF RadioButton 绑定boolean值
  • EasyExcel全面实战:掌握多样化的Excel导出能力
  • 华为OD机试 - 分班问题(Java 2024 E卷 200分)
  • 国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)
  • 3.点位管理改造-列表查询——帝可得管理系统
  • (undone) 阅读 MapReduce 论文笔记
  • 联合体/共同体与结构体的区别
  • SpringBoot 请求和响应
  • Python库pandas之四
  • Java进销存ERP管理系统源码