首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring org.springframework.beans.factory.BeanCurrentlyInCreationException:中的beans出现循环依赖错误

是指在Spring框架中,当两个或多个bean之间存在相互依赖关系时,可能会导致循环依赖错误的异常。

循环依赖是指两个或多个bean之间相互依赖,形成了一个闭环的情况。当Spring容器在创建bean的过程中遇到循环依赖时,会抛出BeanCurrentlyInCreationException异常,表示当前bean正在创建中,无法满足循环依赖的要求。

循环依赖错误的解决方法有以下几种:

  1. 构造器注入:使用构造器注入代替属性注入,通过构造器参数传递依赖对象,可以避免循环依赖的问题。
  2. Setter方法注入:将依赖对象的注入改为使用setter方法注入,通过setter方法设置依赖对象,可以解决循环依赖的问题。
  3. 使用@Lazy注解:在bean的定义上添加@Lazy注解,延迟加载bean的创建,可以解决循环依赖的问题。
  4. 使用@DependsOn注解:在bean的定义上添加@DependsOn注解,指定bean的创建顺序,可以解决循环依赖的问题。
  5. 使用接口注入:将依赖对象定义为接口类型,在bean的定义中使用接口注入,可以解决循环依赖的问题。

需要注意的是,循环依赖是一种设计上的问题,应尽量避免出现循环依赖的情况。在开发过程中,应合理设计bean之间的依赖关系,避免出现循环依赖导致的错误。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring循环依赖解决详解

原 https://www.cnblogs.com/leeego-123/p/12165278.html 前言 说起Spring循环依赖解决办法,相信很多园友们都或多或少知道一些,但当真的要详细说明时候...一、先说说Spring解决循环依赖是什么 Java循环依赖分两种,一种是构造器循环依赖,另一种是属性循环依赖。...下面就一起看看Spring内部是在何时完成属性注入,又是如何解决循环依赖。...至此,循环依赖Spring处理过程已经追溯完毕,下面我们总结一下。 小结 属性注入主要是在populateBean方法中进行。...至此,Spring循环依赖总结分析结束,一句话来概括一下:Spring通过将实例化后对象提前暴露给Spring容器

37130
  • Spring 循环依赖

    前言 记录Spring一些基本理论,引申出Spring循环依赖问题 Spring是什么 是容器(承载各种bean) 是基石、生态(SpringBoot、SpringCloud都是在此基础上扩展)...Spring循环依赖问题 什么是循环依赖 在上文创建Bean对象流程,放大属性赋值自定义属性赋值流程,假设有这种情况:自定义对象A引用了自定义对象B,自定义对象B又引用了自定义对象A,这种情况称之为循环依赖...有种特殊情况,如果A对象b属性,是通过构造函授方式注入 ,那么就是在A实例化阶段就需要B对象了,这种情况就无法解决循环依赖问题!...表达式 看流程图,使用二级缓存,就能解决循环依赖问题,为什么需要用到三级缓存?...;这样只有使用第三级缓存封装一个函数式接口对象到缓存, 发生循环依赖时,再触发代理类生成。

    93310

    Spring解决循环依赖报错问题

    什么是循环依赖 当一个ClassA依赖于ClassB,然后ClassB又反过来依赖ClassA,这就形成了一个循环依赖: ClassA -> ClassB -> ClassA Spring循环依赖问题...构造注入,也是Spring团队推荐Spring依赖注入方式(依赖来自IDEA提示): 虽然是Spring官方推荐,但是这种方式就是容易出现循环依赖导致程序跑不起来情况: 当然,也存在多种解决循环依赖办法...重新设计代码 当出现循环依赖时候,可以考虑重新设计下代码。一般来说,当循环依赖问题出现时候,往往其原因是设计上分层没有处理好,各个类耦合度高,各自职责不够单一。...,一样可以解决Spring循环依赖问题。...总结 使用Spring作为开发框架,一不小心就会碰到循环依赖,程序启动不了问题。如果真的出现循环依赖问题,可以尝试采用上面的几种方式解决。

    20510

    Spring循环依赖解决方案

    Spring循环依赖 循环依赖循环依赖就是循环引用,就是两个或多个bean互相之间持有对方。...Spring如何解决循环依赖 spring循环依赖有三种情况: 1、构造器注入形成循环依赖。...beanA需要在beanBsetter方法完成初始化,beanB也需要在beanAsetter方法完成初始化,spring设计机制主要就是解决这种循环依赖,也是今天下文讨论重点。...3、prototype作用域bean循环依赖。这种循环依赖同样无法解决,因为spring不会缓存‘prototype’作用域bean,而spring循环依赖解决正是通过缓存来实现。...步骤三:初始化beanB过程又发现beanB依赖了beanA,于是又进行beanA初始化,这时发现beanA已经在进行初始化了,程序发现了存在循环依赖,然后通过步骤一暴露单例工程方法拿到beanA

    2.1K30

    Spring解决循环依赖报错问题

    Spring循环依赖问题 当你使用构造注入依赖时候,就有可能发生循环依赖然后报错问题。什么是构造注入呢?...构造注入,也是Spring团队推荐Spring依赖注入方式(依赖来自IDEA提示): image.png 虽然是Spring官方推荐,但是这种方式就是容易出现循环依赖导致程序跑不起来情况:...重新设计代码 当出现循环依赖时候,可以考虑重新设计下代码。一般来说,当循环依赖问题出现时候,往往其原因是设计上分层没有处理好,各个类耦合度高,各自职责不够单一。...,一样可以解决Spring循环依赖问题。...总结 使用Spring作为开发框架,一不小心就会碰到循环依赖,程序启动不了问题。如果真的出现循环依赖问题,可以尝试采用上面的几种方式解决。

    2.9K20

    Spring循环依赖解决方案

    循环依赖循环依赖Spring框架中常见问题之一,当两个或多个类相互引用对方时,就会出现循环依赖情况。这种情况下,Spring框架无法确定哪个类应该先实例化和初始化,从而导致异常。...应该尽量正确地重新设计组件,以便它们层次是精心设计,也没有必要循环依赖。...@Lazy  解决Spring 循环依赖一个简单方法就是对一个Bean使用延时加载。...,最简单方式是在全局配置文件中允许循环引用存在,此属性默认值为false,显示声明为true,可回避项目启动时控制台循环引用异常。...@PostConstruct 打破循环另一种方式是:在要注入属性(该属性是一个bean)上使用 @Autowired ,并使用@PostConstruct 标注在另一个方法,且该方法里设置对其他依赖

    6.1K30

    如何在 Spring 解决 bean 循环依赖

    不幸是,这样循环依赖一旦形成,Spring 启动过程中就会报错: Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException...那么,如何来解决循环依赖呢? 3. 循环依赖解决办法 在 Spring 设计,已经预先考虑到了可能循环依赖问题,并且提供了一系列方法供我们使用。下面就一一来为您介绍。...当然,在实际场景下,可能当循环依赖出现时,重新设计已经显得有些“何不食肉糜”了,我们需要更加切实可行、立竿见影解决方法。.../html/beans.html 正如我们上文所介绍,BeanCurrentlyInCreationException 产生往往源于构造器注入方式循环依赖。...总结 本文介绍了在 Spring 使用过程,避免循环依赖处理方法。这些方法通过改变 bean 对象实例化、初始化时机,避免了循环依赖产生,它们之间有着微妙差别。

    2.9K20

    再探循环依赖Spring 是如何判定原型循环依赖和构造方法循环依赖

    写在前面   Spring 中常见循环依赖有 3 种:单例 setter 循环依赖、单例构造方法循环依赖、原型循环依赖   关于单例 setter 循环依赖Spring 是如何甄别和处理,可查看:...Spring 启动正常,但从 Spring 容器获取 loop 实例时候,报了同样错误   问题来了:① Spring 是如何甄别原型循环依赖,然后进行报错提示        ② 为什么两种情况报错时机会不一致...是如何甄别单例情况下构造方法循环依赖     2、Spring 是如何甄别原型循环依赖     3、为什么单例构造方法循环依赖和原型循环依赖报错时机不一致   我们慢慢往下看,跟源码过程可能比较快...我们在控制台看到异常信息就从这来 原型循环依赖甄别   原型类型实例有个特点:每次获取都会重新创建一个实例,那在 Spring 启动过程,还有创建必要吗?   ...  3、为什么单例构造方法循环依赖和原型循环依赖报错时机不一致     单例构造方法实例创建是在 Spring 启动过程完成,而原型实例是在获取时候创建     所以两者循环依赖报错时机不一致

    93010

    解决循环依赖问题:优雅处理依赖关系技巧

    在软件开发依赖是不可避免。我们经常需要在应用程序不同组件之间建立依赖关系,以实现功能模块化和复用。然而,有时候依赖关系可能变得复杂,甚至导致循环依赖问题。...在本文中,我们将通过项目中实际遇到异常探讨一些解决循环依赖问题技巧,帮助你在开发过程优雅地处理依赖关系。 异常详情 Spring Bean配置存在循环依赖问题。...具体而言,名为'mngAuditWorkbenchSummaryRepositoryImpl'Bean已经注入到其他多个Bean,但Spring无法解决这个循环引用。...配置存在循环依赖问题。...循环依赖发生在两个或多个Bean直接或间接地相互依赖,创建了一个无法由Spring解决循环。 解决方案 分析依赖关系:确定涉及循环引用Bean,并确定它们之间依赖关系。

    77940

    Spring如何解决循环依赖

    1.什么是循环依赖 就是我们有两个服务,A服务,B服务,然后我们在A里注入了B,然后在B里注入了A,这就是循环依赖了,这种情况如果我们不解决的话,那就会出现一个相互依赖注入循环。...>> singletonFactories = new HashMap(16); 2.2 三级缓存如何解决循环依赖问题 前置知识:Spring单例对象初始化主要分为三步: (1)createBeanInstance...:实例化,其实也就是调用对象构造方法实例化对象 (2)populateBean:填充属性,这一步主要是多bean依赖属性进行填充 (3)initializeBean:调用spring xml...,A会进行提前AOP,所以B填充是A代理对象 当A填充完B时,构成互相循环依赖对方 3.1.4....5.3代码里如果出现循环依赖怎么处理比较好?

    1K20

    spring(5) - Bean实例化,对循环依赖处理

    背景知识 (1) spring(3) - springboot启动过程 (2) spring(4) - spring Bean创建并注册到容器 2....Bean创建 通过 背景知识,我们知道,spring在创建Bean时候,分三步,先创建bean,然后注册到容器,之后进行属性装配,在进行初始化 2.1 AbstractAutowireCapableBeanFactory...3 应用三层缓存对循环依赖处理举例 如果 A,B 两个类互相依赖,且需要实例化,当只有一层缓存 singletonObjects 时候,A 实例化调用B,B实例化调用A,就无法结束了; 此时加一层缓存...singletonFactories中找到其工厂,直接创建B 未初始化实例放到二级缓存,并将三级缓存B工厂清除,然后返回继续实例化A,因为从二级缓存中找到了B未初始化引用,得以继续完成实例化A...,当需要继续初始化B时,再将A完整实例引用从一级缓存给到B实例,这样就完成了循环依赖实例化; 根本原理是 从JVM层面,将实例化分成了 声明, 初始化 两个阶段,(也就是分层思想),在一层无法解决时候

    70820

    再谈spring循环依赖是怎么造成

    老生常谈,循环依赖!顾名思义嘛,就是你依赖我,我依赖你,然后就造成了循环依赖了!由于A中注入B,B中注入A导致吗? 看起来没毛病,然而,却没有说清楚问题!...甚至会让你觉得你是不清楚spring循环依赖! 那么,spring循环依赖到底是啥玩意?...BA也自然而然完成了初始化动作; 其中,构造器注入单例循环依赖是无法解决,因为在构造器注入时,本身实例无法生成;如果强行使用,将导致不安全发布,从而导致各种未知问题! 3....其实普通使用不会用到这个功能,只会在一些增强点作这些工作。 ? 所以,spring 如何避免循环依赖失败?...尝试从缓存获取bean,可能是提前暴露,也可能是已经完全初始化好;(提前暴露解决循环依赖) 2.

    69440

    Spring源码解析(十)分析一个Spring循环引用失败问题

    前言: 之前我们有分析过Spring是怎么解决循环引用问题,主要思路就是三级缓存;Spring在加载beanA时候会先调用默认空构造函数(在没有指定构造函数实例化前提下)得到一个空实例引用对象...,这个时候没有设置任何值,但是Spring会用缓存把它给提前暴露出来,让其他依赖beanAbean可以持有它提前暴露引用;比如 a 依赖b ,b依赖a,并且他们都是通过默认方法实例化,那么简单流程是这样...具体详细一点可以看这篇文章Spring-bean循环依赖以及解决方式 Spring不能解决“A构造方法依赖了B实例对象,同时B依赖了A实例对象”这类问题 这篇文章我想从源码角度来分析一下整个流程...;并且分析一下Spring为什么不能解决“A构造方法依赖了B实例对象,同时B依赖了A实例对象”这类问题 例子 ---- 首先创建两个bean类; CirculationA 有个属性circulationB...情况就是这样,只要是用构造函数创建一个实例,并且构造函数里包含值存在循环引用,那么spring就会抛出异常; 所以如果有循环引用情况请避免使用构造函数方式

    83340

    面试必问:Spring 循环依赖三种方式

    引言:循环依赖就是N个类循环嵌套引用,如果在日常开发我们用new 对象方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错。下面说一下Spring是如果解决循环依赖。...第一种:构造器参数循环依赖 Spring容器会将每一个正在创建Bean 标识符放在一个“当前创建Bean池”,Bean标识符在创建过程中将一直保持在这个池中。...StudentB有参构造是StudentC,StudentC有参构造是StudentA ,这样就产生了一个循环依赖情况, 我们都把这三个Bean交给Spring管理,并用有参构造实例化。...,所以会依赖错误 ,(初始化完Bean会从池中移除) 第二种:setter方式单例,默认方式 如果要说setter方式注入的话,我们最好先看一张SpringBean实例化图 ?...对象,以此类推,不会出来循环问题喽、 下面是Spring源码实现方法。

    37320
    领券