SpringBoot已经禁掉了循环依赖!

news2024/11/24 12:44:22

还在问循环依赖嘛?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 {

    @Resource
    private ServiceB serviceB;
}

serviceB

@Service
public class ServiceB {

    @Resource
    private 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.coloradmin.cn/o/1321644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机与自动医疗检查仓:技术革新引领医疗未来

计算机与自动医疗检查仓&#xff1a;技术革新引领医疗未来 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;已经成为现代社会不可或缺的一部分。它们的应用领域日益扩展&#xff0c;从简单的日常任务到复杂…

云原生系列2-GitLab和Jenkins

1、GitLab类似github&#xff0c;是个私有仓库 1、GitLab安装&#xff0c;至少8G内存4核cpu # 查找Gitlab镜像 docker search gitlab/gitlab-ce # gitlab镜像拉取 docker pull gitlab/gitlab-ce # 查看镜像 docker images # 本机先建3个目录&#xff0c;为了gitlab容器通过挂…

【C语言】自定义类型:结构体深入解析(一)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

Moonbeam生态项目分析 — — 跨链借贷协议Orbiter One

概览 Orbiter One是一个非托管的借贷协议和DeFi中心&#xff0c;专注于跨链互操作性。通过使用从借贷中赚取的ORB Token铸造的Intergactic Whiskers Brigade NFT&#xff0c;用户可以质押并获得额外奖励&#xff0c;借贷和跨链存款则可以在不离开Moonbeam的情况下无缝参与其他…

听说蚂蚁的职级调整了

上周三听说蚂蚁的职级调整了&#xff0c;让我们来看一下具体的改革方案&#xff1a; 简单地说&#xff0c;就是把原来的 PN 级一拆二&#xff0c;拆成 2N 和 2N1 级。 从本质上来看&#xff0c;就是把原来扁平化的宽职级变多了&#xff0c;相当于 double 了。 那职级变多有什…

初探 Reactor、Proactor 线程模型与 BIO、AIO、NIO

1 前言 工作中或者是技术上经常会遇到 I/O 、线程模型相关的问题&#xff0c;以及同步、异步、阻塞、非阻塞等各种基础问题&#xff0c;之前上学时候的概念认知总是模糊的&#xff0c;一知半解。趁这次了解希望能够更加深入的去了解这方面的知识&#xff0c;于是有了接下来这篇…

AWS 知识一:如何在AWS上启动云AD服务器(详细到极致)

前言&#xff1a; 首先这里指的云AD服务器&#xff0c;只是为了让读友更好理解。云AD服务器在AWS中称为目录。AWS一共提供了4种目录类别&#xff0c;下面我将全程使用AWS托管微软AD这种目录类别进行示例。他完全提供了和Microsoft AD的功能&#xff0c;包括NTLM&#xff0c;Ker…

Android-Binder基本原理

一、进程角度看IPC机制 在Android系统中&#xff0c;每个进程只能运行在自己所拥有的虚拟地址空间。例如&#xff0c;一个4GB的虚拟地址空间&#xff0c;包含3GB的用户空间和1GB的内核空间&#xff0c;内核空间的大小可以通过参数配置进行调整。两个进程之间的用户空间是彼此独…

如何开发一个免费的App

开发一个免费App意味着能够在项目启动初期&#xff0c;以更低成本的方式进行业务的迭代和市场化验证。 互联网发展到2023年&#xff0c;尤其在生成式AI及大模型技术“跃进式”增长的背景下&#xff0c;一个创新式商业模式的起步变得异常艰难。但如果用好工具&#xff0c;那么不…

【网络安全】—计算机网络基础

文章目录 网络必备基础物理层数据链路层与交换机网络模型OSI/TCP对等传输虚拟局域网VLAN静态路由与配置网络地址转换NAT访问控制列表ACLIP协议与IP地址分类子网掩码网关子网划分总结 计算机网络是指将地理位置不同的、功能独立的多台计算机通过通信线路连接起来&#xff0c;以功…

前端基础Vue项目中的插槽使用

概念 简单理解就是组件内部留一个或多个的插槽位置&#xff0c;可供组件传对应的模板代码进去。插槽的出现&#xff0c;让组件变的更加灵活。 1. 匿名插槽 父组件 <son><p>我是父组件通过匿名插槽传输的内容</p></son> 子组件 <template><di…

透过清澈的眼眸:新生儿视力检测的重要性与留意事项

引言&#xff1a; 新生儿的视力发展是其整体感知和认知能力的基础。因此&#xff0c;进行新生儿视力检测是保障他们健康成长的关键一步。本文将深入探讨新生儿视力检测的重要性&#xff0c;并提供父母在这一过程中需要留意的关键事项&#xff0c;以确保宝宝在视觉方面的正常发…

50ms时延工业相机

华睿工业相机A3504CG000 参数配置&#xff1a; 相机端到端理论时延&#xff1a;80ms 厂家同步信息&#xff0c;此款设备帧率上线23fps&#xff0c;单帧时延&#xff1a;43.48ms&#xff0c;按照一图缓存加上传输显示的话&#xff0c;厂家预估时延在&#xff1a;80ms 厂家还有…

2018年第七届数学建模国际赛小美赛C题共享单车对城市交通的影响解题全过程文档及程序

2018年第七届数学建模国际赛小美赛 C题 共享单车对城市交通的影响 原题再现&#xff1a; 共享自行车改变了许多城市的交通状况&#xff0c;许多大城市引入共享自行车来解决交通问题。我们需要定量评估共享自行车对城市交通的影响&#xff0c;以及相关的经济、社会和环境影响。…

人工智能辅助下的人工心脏:未来医疗的奇迹

导言 人工智能在医学领域的应用不断创新&#xff0c;其中人工心脏作为医疗工程的重要方向&#xff0c;将为心血管疾病患者带来新的治疗可能性。本文将深入研究人工智能辅助下的人工心脏技术&#xff0c;其原理、应用以及对未来医疗的影响&#xff0c;探讨人工心脏的发展历程、面…

七轴开源协作机械臂myArm视觉跟踪技术!

引言 ArUco标记是一种基于二维码的标记&#xff0c;可以被用于高效的场景识别和位置跟踪。这些标记的简单性和高效性使其成为机器视觉领域的理想选择&#xff0c;特别是在需要实时和高精度跟踪的场景中。结合机器学习和先进的图像处理技术&#xff0c;使用ArUco标记的机械臂系统…

安卓自动化 APP:轻松关闭任意开屏广告 | 开源日报 No.116

gkd-kit/gkd Stars: 8.7k License: GPL-3.0 基于无障碍 高级选择器 订阅规则的自定义屏幕点击 APP&#xff0c;主要功能包括实现跳过任意开屏广告、关闭应用内部弹窗广告以及一些快捷操作&#xff0c;如微信电脑登录自动同意和领取红包等。其核心优势和特点包括&#xff1a;…

[Ray Tracing in One Weekend] 笔记

前言 本文参照自raytracing in one weekend教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪&#xff1f; 光线追踪模拟现实中的成像原理&#xff0c;通过模拟一条条直线在场景内反射折射&#xff0c;最终…

【深度学习目标检测】十、基于yolov5的火灾烟雾识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

失业无忧!掌握这四个网站,年收入10-20万!

大家好&#xff01;在职场中&#xff0c;失业可能是每个人都会面临的一种情况。当然&#xff0c;失业并不是终点&#xff0c;而是重新出发的起点。在这个充满机遇的数字时代&#xff0c;利用网络资源来提升自己是再合适不过了。今天&#xff0c;我将介绍四个非常有用的网站&…