25.从零开始学springboot-springboot2.1.x报错循环依赖问题

snakeyaml1.x升级2.x导致项目启动报错 阅读详情

前言

实际开发中,我们常常是基于模块分工开发的,也就是不同的人负责不同的模块。最后合并代码。这种方式适合多人协同,每个人只关心自己的业务模块实现(controller/model/service/mapper等),当碰到需要其它模块支持的功能时,只需引入其它模块的类即可调用其方法

循环依赖问题

Bean A 依赖 B,Bean B 依赖 A这种情况下出现循环依赖。
Bean A → Bean B → Bean A

更复杂的间接依赖造成的循环依赖如下。
Bean A → Bean B → Bean C → Bean D → Bean E → Bean A

循环依赖问题的本质

当程序启动,Spring Context加载所有的Bean时,会尝试按他们运行的工作顺序创建Bean。

例如,有如下依赖:
Bean A → Bean B → Bean C
Spring先创建beanC,接着创建bean B(将C注入B中),最后创建bean A(将B注入A中)。

但当存在循环依赖时,Spring将无法决定先创建哪个bean。这种情况下,Spring将产生异常BeanCurrentlyInCreationException。

举例

有一个ServiceA需要调用ServiceB的方法,那么ServiceA就依赖于ServiceB,那在ServiceB中再调用ServiceA的方法,就形成了循环依赖。Spring在初始化bean的时候就不知道先初始化哪个,bean就会报错。

解决

  • 重新设计
    重新设计结构,消除循环依赖。

  • 使用注解 @Lazy
    一种最简单的消除循环依赖的方式是通过延迟加载。在注入依赖时,先注入代理对象,当首次使用时再创建对象完成注入。

	@Autowired
	@Lazy
	private ServiceA serviceA;

	@Autowired
	@Lazy
	private ServiceB serviceB;

  • 使用Setter/Field注入
    Spring文档建议的一种方式是使用setter注入。当依赖最终被使用时才进行注入。
@Component
public class ServiceA {
    private ServiceB serviceB;
    @Autowired
    public void setServiceB(ServiceB serviceB) {
        this.serviceB = serviceB;
    }
    public ServiceB getServiceB() {
        return serviceB;
    }
}
  • 使用@PostConstruct
@Component
public class ServiceA {

    @Autowired
    private ServiceB serviceB;
 
    @PostConstruct
    public void init() {
        serviceB.setServiceA(this);
    }
 
    public ServiceB getServiceB() {
        return serviceB;
    }
}
 

请关注我的订阅号

订阅号.png

基于SpringBoot构造器注入循环依赖及解决方式 主要介绍了基于SpringBoot构造器注入循环依赖及解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

相关推荐

CSS字体样式全攻略

🧱 让文字有空间感,适合标题或LOGO。🖋️适合插画、创意工作者的个人页面。🔥 适合标题、品牌名,视觉冲击力强。🧘‍♀️适合极简设计、文化类网站。✨适合科技类网站、博客、作品集。🚀适合游戏、AI、科技类项目。🐰 适合儿童类网站或节日氛围。📖适合时尚、生活方式类内容。🌫️ 适合神秘、梦幻主题。🌃 夜店风、科技感十足。具体效果是文字会上下跳动。

dreams_dream的博客 1804

SpringBoot2.1.x报错循环依赖问题解决方法

最近的springboot项目开发时运行没问题,打包运行时报错:抛出BeanCurrentlyIn CreationException异常:Requested bean is currently in creation: Is there an unresolvable circular reference? 查了下原因是循环依赖问题。 什么是循环依赖? 当我们有两个(当然也可能是多个)类...

QC班长的博客 8678

Arm Neoverse CMN-700 QoS与PrefetchTarget架构解析

在现代多核处理器系统中,内存访问性能优化是提升整体效能的关键。QoS(服务质量)技术通过优先级调控机制,确保关键任务获得更高的缓存带宽和内存访问权限。PrefetchTarget作为预取技术的一种实现,能够显著降低内存访问延迟,特别适用于AI训练和数据库系统等高性能计算场景。Arm Neoverse CMN-700通过RN SAM模块实现了硬件级的地址范围检测和优先级调控,支持最多8个独立内存区域的QoS配置。测试数据显示,合理配置QoS可使关键任务延迟降低40%,而PrefetchTarget技术则能减少

weixin_36197669的博客 314

Springboot循环依赖解决办法

首先说一下什么是依赖循环,比如:我现在有一个ServiceA需要调用ServiceB的方法,那么ServiceA就依赖于ServiceB,那在ServiceB中再调用ServiceA的方法,就形成了循环依赖。Spring在初始化bean的时候就不知道先初始化哪个bean就会报错。[java] view plain copypublic class ClassA {      @Autowired ...

红袖添香的博客 1万+

AI数字人:口播与唇形同步的福音,支持本地部署/批量生成/口齿清晰

你也可以直接输入语音,虚拟化身会根据语音的节奏和语调,同步做出相应的动作和表情,表现更加生动。不过这依然是个值得关注的工具。借助先进的 AI 算法,Heygem 高精度捕捉五官、轮廓等特征,构建逼真的虚拟模型。同时,它还能克隆语音,捕捉人声的细微特征,支持多种语音参数设置,打造高度相似的音色效果。打开设置,调整镜像存储位置,镜像文件比较大70~80G,选择合适的盘,设置完成后点击“Apply & Restart”。数字人视频画面与声音高度同步,口型匹配自然流畅,智能优化音视频效果,带来极佳的视听体验。

m0_72580657的博客 5860

comsol移动网格_comsol模拟移动的纳秒脉冲激光烧蚀材料,温度场分布,结果总不理想,求助大佬!!...

本人comsol新手一枚,希望大家多多指点研究课题:纳秒脉冲激光刻蚀材料表面想用comsol模拟刻蚀过程中的温度场分布,脉宽为300ns,重复频率100kHz,光斑移动速度为5000mm/s,光斑直径50um,激光功率10W,材料种类为:有机涂层,属性如下目前,采用的是一个移动的高斯面光源x脉冲函数,脉冲函数我用的是一个周期性方波:周期性拓展后,画出来的脉冲图,不知道为什么在0~1s的区间内只有1...

weixin_33288893的博客 4740

SpringBoot循环依赖解决

一、循环依赖是什么? 我们了解到SpringBoot通过注解componentScan注解。将Bean注入到Spring容器、那么在注入过程中,如遇到这样的问题在将BeanA注入到容器中的过程中:BeanA持有BeanB的引用,BeanB持有BeanC的引用。BeanC持有BeanA的引用、当BeanA注入依赖于BeanC,BeanC又依赖于BeanA。如此循环,就会导致BeanCurrentlyInCreationException异常. 这就是我们常遇见的SpringBoot循环依赖的问题、通常发生

weixin_44399827的博客 8995

Gromacs空蛋白模拟实战:从PDB文件到动力学轨迹的完整流程解析

本文详细解析了使用Gromacs进行空蛋白分子动力学模拟的完整实战流程。从PDB文件处理、力场选择与拓扑构建,到模拟盒子创建、溶剂化与电荷中和,再到能量最小化、NVT/NPT平衡及最终的生产模拟与基础分析,提供了每一步的命令详解和关键注意事项,旨在帮助计算生物学研究者系统掌握这一核心研究工具。

weixin_28454475的博客 275

Spring Boot 2.0.0 升级到2.4.1 循环依赖问题的解决

目录 Spring Boot 2.0.0 升级到2.4.1 循环依赖问题的解决 描述 分析 第一层原因 第二层原因 第三层原因 第四层原因 第五层原因 第六层原因 第七层原因 最终原因 解决方案 相关各版本的比对 Spring Boot 2.0.0.release + Druid 1.19 Spring Boot 2.4.1 + Druid 1.19 Spring Boot 2.4.1 + Druid 1.2.5 Spring Boot 2.4.1 + Druid 1.2.

飞一站的博客 4881

SIMPLIS实战:从零构建理想BUCK电路,精准计算与POP稳态分析

本文详细介绍了如何使用SIMPLIS软件从零开始构建并仿真一个理想的BUCK降压电路。通过设定关键参数、计算理想器件值,并搭建仿真模型,文章重点演示了暂态仿真以观察电路上电过程,并深入讲解了高效的POP(周期性工作点)稳态分析技术,帮助工程师快速验证设计、评估稳态性能,从而加速电源设计迭代。

weixin_29165465的博客 392

基于深度学习YOLOv5的草莓成熟度检测系统详解(深度学习模型+UI界面+Python代码+训练数据集)

数据采集与预处理模块:负责收集草莓图像,并进行数据增强和标注。深度学习模型训练模块:使用YOLOv5模型进行草莓成熟度检测模型的训练。模型推理模块:加载训练好的模型,对输入图像或视频进行草莓成熟度检测。UI界面模块:提供用户交互界面,方便用户上传图像或视频进行成熟度检测。本文详细介绍了基于YOLOv5的草莓成熟度检测系统的构建过程,包括数据集的构建、模型的训练与推理、以及UI界面的设计。通过本文的指导,读者可以快速搭建一个高效的草莓成熟度检测系统,并应用于实际场景中。

斌擎科技 523

12.1.从零开始学springboot-getHibernateProperties报错问题

前言 博主最近研究JPA配置多数据源时,发现网上的很多大牛的案例pull下来运行报错 如图 Error:(47, 29) java: 找不到符号 符号: 方法 getHibernateProperties(org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings) 位置: 类型为org.springframewo...

CTO技术的博客 3645

损失函数大汇总(三十八)(AUCPR Loss附公式推导与代码)

本文系统介绍了AUCPR Loss的原理与应用。针对不平衡分类任务中AUC指标不够敏感的问题,提出通过优化PR曲线面积(AUCPR)来提升模型性能。文章详细推导了AUCPR的可微近似实现:首先用sigmoid函数软化阈值判断,构造可微的TP/FP/FN计数;然后基于软Precision和Recall计算近似PR曲线面积;最后通过数值积分得到可优化的损失函数。特别讨论了温度参数τ对训练稳定性的影响,并比较了AUCPR与AUC、AP等指标的异同。该方法适用于医学筛查、欺诈检测等极端不平衡场景,能更准确反映模型对

悦学共鸣,温柔以待,汇聚光芒,共同成长 441

使用springboot测试循环依赖问题

earlySingletonExposure为false,那三级缓存中就没有TestA,在populateBean(TestB)中又会走getSingleton(),最终在beforeSingletonCreation抛出了循环依赖的异常。为true来解决循环依赖问题,这个配置在spring中不说默认为true吗,难道是springboot对这个配置进行了修改?那为啥还是出现了循环依赖问题呢?可是印象里,spring不是默认支持循环依赖的吗?在application.properties中,设置。

T_hikHome的博客 7726

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

解决PageHelper循环依赖:com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration

PageHelper循环依赖解决com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration

1 Byte 的博客 8563

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

13.1.从零开始学springboot-jdbcUrl报错问题

前言 博主近日在写springboot2.x(2.1.3)jdbc/jpa 多数据源的案例,运行代码时报错 jdbcUrl is required with driverClassName 原因 查阅了资料,发现还是springboot最细2.x版的原因 贴出两个关键配置: application.yml: spring: datasource: master: user...

CTO技术的博客 1226

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SpringBoot启动报错属性循环依赖报错

文章目录1 问题背景2 前言3 代码场景3 解决方案3.1 懒加载注入3.2 set方法注入 1 问题背景 SpringBoot项目启动报错。报错提示为某个类的A属性与B属性循环有依赖了。 2 前言 SpringBoot启动过程中是默认支持循环依赖(即A类中有B属性,B类中有A属性),笔者还不清楚为什么会发生循环依赖报错。 3 代码场景 发生报错的代码场景如下所示: public class X { @Autowrie private A a; @Autowrie

Android_la的博客 1655

springboot2.6.x版本的springsecurity注入PasswordEncoder导致循环依赖问题

按照以前项目搭建框架,启动报错 The dependencies of some of the beans in the application context form a cycle: 目测是循环依赖什么的问题, 在userSecurityConfig注入了UserService 在UserService中使用了PasswordEncoder 在userSecurityConfig继承的SecurityConfig中声明了一个Bean,PasswordEncoder 我理解的是:这就造成了,在创建

weixin_42260782的博客 2590

SpringBoot1.x和2.x请求及上传文件大小限制问题的解决

问题描述 前两天写文件上传,接口写好后测试了一下,上传了一个大约15MB的文件,报错org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (16190292) exceeds the configured...

空夜's Blog 6912

springboot2.x升级到spirngboot3.x

升级spring,升级springboot

lizy928的博客 1746

springboot艰难版本升级之路!! springboot 2.3.x版本升级到2.7.x版本

springboot版本升级.

longtime的博客 5171

springBoot1.x升级到2.x遇到的问题

今天闲来无事,想到自己写的小项目还用的是springBoot1.x,于是乎就升级了一下。过程中遇到了几个问题记录一下。 一、1.x使用的druid版本在2.x里不兼容 1.x版本 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.11</version

z132411的博客 737

升级SpringBoot3.x启动报错汇总

springboot 2.x 升级到springboot 3.x本地netty依赖。

u011945967的博客 1703
上一篇: count(*)/count(1)/count(主键)统计效率对比
下一篇: 26.1.从零开始学springboot-全局异常处理
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值