SpringBoot已经禁掉了循环依赖!

还在问循环依赖嘛?SpringBoot已经禁掉了循环依赖!

首发2023-12-18 11:26·yuan人生

如果现在面试时还有人问你循环依赖,你就这样怼他:循环依赖是一种代码质量低下的表现,springboot2.6之后的版本已经默认禁用了。

Spring的bean管理一直是spring的核心。spring循环依赖也成了面试问的重点。但实际上,项目中存在Bean的循环依赖,是代码质量低下的表现。如果每个bean划分好功能、业务边界,就不会出现这种情况。很多开发者不去考虑这些,只是怎么方便怎么来,导致都寄希望于框架层来解决问题,造成了整个代码的设计越来越糟,最后用一些奇技淫巧来填补犯下的错误。

SpringBoot终于忍受不了这种滥用,从2.6版本开始默认禁用了循环依赖!如果你的项目里还存在循环依赖,SpringBoot将拒绝启动!

spring官方说明

验证代码:

pom.xml引入springboot2.6

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.0</version><relativePath/> 
</parent>

serviceA

@Service
public class ServiceA {@Resourceprivate ServiceB serviceB;
}

serviceB

@Service
public class ServiceB {@Resourceprivate ServiceA serviceA;
}

启动报错:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

2023-12-18 11:04:31.862 INFO 34320 --- [ main] o.e.l.MySpringApplicationRunListener : failed 2023-12-18T11:04:31.862

2023-12-18 11:04:31.882 ERROR 34320 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :

***************************

APPLICATION FAILED TO START

***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

┌─────┐

| serviceA

↑ ↓

| serviceB

└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

Disconnected from the target VM, address: '127.0.0.1:64568', transport: 'socket'

Process finished with exit code 1

从报错的信息可以看出,springboot完全没有割裂这种行为。你也可以在配置中开启循环依赖。

spring.main.allow-circular-references=true

spring可能考虑到旧项目的升级的问题,没有完全割裂。但是开发者自身应当知道这是一种代码质量低下的表现。并且就是2.6之前的版本也解决不了构造方法注入,或者开启原型模式下的循环依赖。这种低质量代码随着现在项目越来越复杂、工程越来越庞大,肯定是会被摒弃。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285285.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman使用总结--参数化

将 测试数据&#xff0c;组织到 数据文件中&#xff0c;通过脚本的反复迭代&#xff0c;使用不同的数据&#xff0c;达到测试不同用例的目标 数据文件有两种&#xff1a; CSV &#xff08;类似于excel&#xff09; 格式简单用这个 文件小 JSON&#xff08;字典列表&#x…

输电线路定位:精确导航,确保电力传输安全

在现代社会中&#xff0c;电力作为生活的基石&#xff0c;其安全稳定运行至关重要。而输电线路作为电力传输的重要通道&#xff0c;其故障定位和修复显得尤为重要。恒峰智慧科技将为您介绍一种采用分布式行波测量技术的输电线路定位方法&#xff0c;以提高故障定位精度&#xf…

《PySpark大数据分析实战》-14.云服务模式Databricks介绍基本概念

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

Oracle VM VirtualBox使用——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

简述&#xff1a; Oracle VM VirtualBox是一款开源虚拟机软件&#xff0c;由德国Innotek公司开发&#xff0c;后被Sun Microsystems公司收购&#xff0c;并最终被甲骨文公司收购。它支持在Windows、Mac OS X、Linux、OpenBSD、Solaris、IBM OS2甚至Android等操作系统上创建虚拟…

Docker与云计算平台集成:AWS、Azure、GCP完全指南

Docker和云计算平台的结合&#xff0c;如AWS&#xff08;Amazon Web Services&#xff09;、Azure&#xff08;Microsoft Azure&#xff09;和GCP&#xff08;Google Cloud Platform&#xff09;&#xff0c;为现代应用的构建和部署提供了巨大的便利性。本文将深入研究如何与这…

php hyperf 读取redis,存储到数据库

背景说明 小白&#xff1a;伟哥&#xff0c;java中的set是无序的&#xff0c;Redis中可以带顺序吗&#xff1f; 伟哥&#xff1a;可以&#xff0c; 不过不叫set了&#xff0c;叫zset。 概述 SortedSet又叫zset&#xff0c;它是Redis提供的特殊数据类型&#xff0c;是一种特殊…

【基础篇】1.2 认识STM32(二)

3.3 VREF/VREF-引脚 VREF和VREF-是STM32中用于提供参考电压的引脚。如下图&#xff1a; VREF引脚可以连接一个单独的外部参考电压&#xff0c;范围在2.0V&#xff5e;VDDA&#xff0c;但不能超过VDDA&#xff0c;否则就超过了模拟器件的最大供电电压。在100引脚的封装中&#…

U8 语法制导翻译技术

文章目录 一、总述二、翻译文法1、概念 三、语法制导翻译1、概念2、带属性的翻译文法3&#xff09;综合属性4&#xff09;继承属性5&#xff09;举例 3、 L-属性翻译文法&#xff08;L-ATG&#xff09;1&#xff09;概念2&#xff09;求值规则 4、简单赋值形式的L-ATG&#xff…

小程序自定义轮播图样式

小程序自定义轮播图样式以下是各案例&#xff0c;仅供大家参考。 效果展示&#xff1a; index.wxml代码&#xff1a; <view><!-- 轮播 --><view><swiper indicator-dots"{{indicatorDots}}"autoplay"{{autoplay}}" interval"{{…

AR室内导航如何实现?技术与原理分析

随着科技的进步&#xff0c;我们生活中许多方面正在被重新定义。其中之一就是导航&#xff0c;尤其是室内导航。增强现实&#xff08;AR&#xff09;技术的出现为室内导航带来了革命性的变革。本文将深入探讨AR室内导航的技术与原理&#xff0c;以及它如何改变我们的生活方式。…

ZKP Commitment (1)

MIT IAP 2023 Modern Zero Knowledge Cryptography课程笔记 Lecture 5: Commitment 1 (Ying Tong Lai) Overview: Modern SNARK IOP: Interactive Oracle ProofCommitment SchemeIOP “compiled by” the commitment scheme to get a non-interactive proofAn IOP is “inform…

穷苦人家的生活就如同战争一般,先登改变人生。

五行补火土方法   颜色化解   颜色也会对人命运产生影响&#xff0c;其力量虽较方位、行业补救小些&#xff0c;但却简便易行&#xff0c;随时可做。命理上所指的颜色分为五种&#xff0c;分别归属于金木水火土五行&#xff0c;具体是&#xff1a;金为白色&#xff0c;水为…