在编写Spring 时,会遇到循环依赖的问题,如下:
<bean id="cycleA" class="di.cycledependency.CycleDependencyA"> <constructor-arg ref="cycleB"/> </bean> <bean id="cycleB" class="di.cycledependency.CycleDependencyB"> <constructor-arg ref="cycleA"/> </bean>
public class CycleDependencyA { private final CycleDependencyB b; public CycleDependencyA(CycleDependencyB b) { this.b = b; } } public class CycleDependencyB { private final CycleDependencyA a; public CycleDependencyB(CycleDependencyA a) { this.a = a; } }
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'cycleA': Requested bean is currently in creation: Is there an unresolvable circular reference? at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:339) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:215) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367) ... 29 more
解决方法是用Setter代替构造函数:
package di.cycledependency; public class CycleDependencyA { private CycleDependencyB b; public void setB(CycleDependencyB b) { this.b = b; } } package di.cycledependency; public class CycleDependencyB { private CycleDependencyA a; public void setA(CycleDependencyA a) { this.a = a; } }
<bean id="cycleA" class="di.cycledependency.CycleDependencyA"> <property name="b" ref="cycleB"/> </bean> <bean id="cycleB" class="di.cycledependency.CycleDependencyB"> <property name="a" ref="cycleA"/> </bean>
相关推荐
第一种:构造器参数循环依赖 Spring容器会将每一个正在创建的Bean 标识符放在一个“当前创建Bean池”中,Bean标识符在创建过程中将一直保持在这个池中。 因此如果在创建Bean过程中发现自己已经在“当前创建Bean池”...
Spring三级缓存解决循环依赖.pdf
spring bean循环依赖时序图详细的描述了spring的循环依赖关系,帮我们快速了解spring是如何优雅的进行处理的
主要介绍了Spring是如何解决循环依赖的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
本篇文章主要介绍了浅谈Spring循环依赖的三种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
通过这三级缓存,Spring能在不牺牲性能的同时,提供强大的循环依赖解决方案。此外,Spring的设计理念也鼓励开发者遵循良好的设计模式,从而避免循环依赖的产生。这种解决方案不仅体现了Spring框架的高度灵活性,也为...
Spring源码最难问题:当Spring AOP遇上循环依赖.docx
Spring5.0源码深度解析之SpringBean循环依赖问题解决方案.docx
Spring循环依赖debug源码图
Springbean循环依赖问题,与解决方案。.docx
《spring源码之循环依赖和三级缓存》整理,本人水平有限,从网上找的资料整合之后做的,请辩证的看待其中内容。
第六节课:Spring 是如何解决循环依赖的1:)什么是循环依赖?所谓的循环依赖就是A依赖B,B依赖A,或者是A依赖B,B依赖C,C依赖A代码实例:public
主要介绍了详解Spring循环依赖的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了浅谈Spring如何解决循环依赖的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Spring循环依赖.vsdx
Spring中的循环依赖解决详解.md
1. 循环依赖是什么? Bean A 依赖 B,Bean B 依赖 A这种情况下出现循环依赖。 Bean A → Bean B → Bean A 更复杂的间接依赖造成的循环依赖如下。 Bean A → Bean B → Bean C → Bean D → Bean E → Bean A 2...
最后我们将总结循环依赖解决的2个关键因素,提前曝光和曝光时机,缺一不可 1. 循环依赖检查 无论单例还是原型模式(下文①代表图中步骤1),spring都有对应的集合保存当前正在创建的beanName,标识该beanName正在被...
主要介绍了简单了解Spring循环依赖解决过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下