广告
返回顶部
首页 > 资讯 > 精选 >如何解决SpringBoot2.6.x默认禁用循环依赖后的问题
  • 747
分享到

如何解决SpringBoot2.6.x默认禁用循环依赖后的问题

2023-06-29 06:06:41 747人浏览 泡泡鱼
摘要

这篇文章主要介绍了如何解决SpringBoot2.6.x默认禁用循环依赖后的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、序言springBoot 2.6.x不推荐使

这篇文章主要介绍了如何解决SpringBoot2.6.x默认禁用循环依赖后的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

    一、序言

    springBoot 2.6.x不推荐使用循环依赖,这是一个好消息,SpringBoot从底层逐渐引导开发者书写规范的代码,同时也是个忧伤的消息,循环依赖的应用场景实在是太广泛了。

    如果从低版本升级到2.6.x,那么很大概率遇到的第一个问题便是循环依赖问题。

    二、问题复原

    1、代码说明

    下面风格的代码比较普遍:两个类都有调用对方方法的需求,因此很容易写成循环引用。

    @Servicepublic class TbDeptServiceImpl extends ServiceImpl<TbDeptMapper, TbDept> implements ITbDeptService {        @Autowired    private ITbStaffService staffService;}
    @Servicepublic class TbStaffServiceImpl extends ServiceImpl<TbStaffMapper, TbStaff> implements ITbStaffService {    @Autowired    private ITbDeptService deptService;}

    2、错误示例

    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.

    Despite circular references being allowed, the dependency cycle between beans could not be broken. Update your application to remove the dependency cycle.

    三、问题解决

    1、粗暴解决

    最简单的方式是在全局配置文件中允许循环引用存在,此属性默认值为false,显示声明为true,可回避项目启动时控制台循环引用异常。

    spring:  main:    allow-circular-references: true

    2、优雅解决

    Spring官方默认禁止使用循环依赖,尽管留有可选配置,允许开发者继续使用循环依赖。

    Spring官方的初心是不希望开发者编写循环依赖的代码,也就是说未来的某个版本可能强制不得使用循环依赖,因此逐渐在新项目中消除循环依赖是不得不面对的问题。

    使用方法的返回值获取实例对象,替换通过成员变量注入实例对象。

    @Servicepublic class TbDeptServiceImpl extends ServiceImpl<TbDeptMapper, TbDept> implements ITbDeptService {        public ITbStaffService getStaffService(){        return SpringUtils.getBean(ITbStaffService.class);    }}
    @Servicepublic class TbStaffServiceImpl extends ServiceImpl<TbStaffMapper, TbStaff> implements ITbStaffService {        public ITbDeptService getDeptService(){        return SpringUtils.getBean(ITbDeptService.class);    }}

    其中需要使用如下依赖,此依赖是笔者抽离出来的公共依赖,可跨项目使用。

    <dependency>    <groupId>xin.altitude.cms.common</groupId>    <artifactId>ucode-cms-common</artifactId>    <version>1.3.4</version></dependency>

    如果找不到此依赖,很大可能是阿里云Maven仓库尚未同步,在项目中强制使用Maven中央仓库即可。

    <repositories>    <repository>        <id>public</id>        <name>maven nexus</name>        <url>https://repo1.maven.org/maven2/</url>        <snapshots>            <updatePolicy>always</updatePolicy>        </snapshots>    </repository></repositories>

    四、小结

    Spring生态作为广泛使用的框架,俨然成为Java企业级应用主流标准,其微小的变化对整合生态带来不可估量的影响。从跟随者转化为引导者,果断禁止循环依赖问题,体现的是作为引导者的担当。

    循环引用使用习惯了,初步看起来代码没毛病,仔细想想是不合理的设计。循环依赖的直接表现是你中有我,我中有你,从对象的设计上令人费解。

    最为开发者时刻关注底层框架的变动,将会在应用层收益。这里所说的底层框架是指jdk、Spring生态、Apache、知名大厂开源并广泛被应用的框架,比如guava等。

    感谢你能够认真阅读完这篇文章,希望小编分享的“如何解决SpringBoot2.6.x默认禁用循环依赖后的问题”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

    --结束END--

    本文标题: 如何解决SpringBoot2.6.x默认禁用循环依赖后的问题

    本文链接: https://www.lsjlt.com/news/323226.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • SpringBoot2.6.x默认禁用循环依赖后的问题解决
      目录一、序言二、问题复原1、代码说明2、错误示例三、问题解决1、粗暴解决2、优雅解决四、小结一、序言 SpringBoot 2.6.x不推荐使用循环依赖,这是一个好消息,Spring...
      99+
      2022-11-13
    • 如何解决SpringBoot2.6.x默认禁用循环依赖后的问题
      这篇文章主要介绍了如何解决SpringBoot2.6.x默认禁用循环依赖后的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、序言SpringBoot 2.6.x不推荐使...
      99+
      2023-06-29
    • SpringBoot2.6.x升级后循环依赖及Swagger无法使用问题
      目录前言升级过程添加依赖循环依赖启动出错文档无法显示聊聊springfox总结前言 最近想体验下最新版本的SpringBoot,逛了下官网,发现SpringBoot目前最新版本已经是...
      99+
      2022-11-13
    • 如何解决Spring循环依赖问题
      本文小编为大家详细介绍“如何解决Spring循环依赖问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何解决Spring循环依赖问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。公共代码package&nbs...
      99+
      2023-07-02
    • springbean循环依赖问题如何解决
      Spring框架可以通过使用构造函数注入和setter方法注入两种方式来解决循环依赖问题。1. 构造函数注入:在循环依赖的类中,通过...
      99+
      2023-09-29
      springbean
    • maven循环依赖问题如何解决
      Maven循环依赖问题可以通过以下几种方式解决:1. 重新设计项目结构:循环依赖通常是由于项目结构设计不合理引起的。可以重新考虑项目...
      99+
      2023-09-17
      maven
    • spring循环依赖问题如何解决
      本篇内容介绍了“spring循环依赖问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、三种循环依赖的情况①构造器的循环依赖:这种...
      99+
      2023-07-02
    • 如何解决Java循环依赖的问题
      今天就跟大家聊聊有关如何解决Java循环依赖的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。最近看到一个问题:如果有两个类A和B,A类中有一个B的对象b,B类中有一个A的对象a,...
      99+
      2023-06-02
    • Spring使用三级缓存解决循环依赖的问题
      Spring如何使用三级缓存解决循环依赖在没开始文章之前首先来了解一下什么是循环依赖 @Component public class A { @Autowired ...
      99+
      2022-11-12
    • Spring解决循环依赖问题及三级缓存的作用
      目录前言1什么是循环依赖2 如何解决循环依赖3无法解决的循环依赖前言 所谓的三级缓存只是三个可以当作是全局变量的Map,Spring的源码中大量使用了这种先将数据放入容器中等使用结束...
      99+
      2022-11-13
    • Spring解决循环依赖问题及三级缓存的作用是什么
      本文小编为大家详细介绍“Spring解决循环依赖问题及三级缓存的作用是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring解决循环依赖问题及三级缓存的作用是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
      99+
      2023-07-02
    • 如何解决Ubuntu中修复默认启用HDMI后没有声音的问题
      本篇内容主要讲解“如何解决Ubuntu中修复默认启用HDMI后没有声音的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决Ubuntu中修复默认启用HDMI后没有声音的问题”吧!声音问题...
      99+
      2023-06-16
    • 如何解决layui使用layui-icon出现默认图标的问题
      这篇文章主要介绍了如何解决layui使用layui-icon出现默认图标的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先上图:后台代码...
      99+
      2022-10-19
    • 详解如何解决使用JSON.stringify时遇到的循环引用问题
      程序员在日常做TypeScript/JavaScript开发时,经常需要将复杂的JavaScript对象通过JSON.stringify序列化成json字符串,保存到本地以便后续具体...
      99+
      2022-11-11
    • 如何解决使用@ManyToMany查询数据时的死循环问题
      本篇内容主要讲解“如何解决使用@ManyToMany查询数据时的死循环问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决使用@ManyToMany查询数据时的死循环问题”吧!使用@Man...
      99+
      2023-06-21
    • 如何解决phpmyadmin显示MySQL数据表“使用中” 修复后依然无效的问题
      小编给大家分享一下如何解决phpmyadmin显示MySQL数据表“使用中” 修复后依然无效的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一...
      99+
      2022-10-18
    • 如何解决vuejs使用value in list循环遍历数组出现警告的问题
      这篇文章主要介绍如何解决vuejs使用value in list循环遍历数组出现警告的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在使用vuejs遍历数组的时候,使用in语句形...
      99+
      2022-10-19
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作