Spring 解决循环依赖
程序员文章站
2022-07-10 10:38:34
...
在编写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>
上一篇: MongoDB增删改查操作
推荐阅读
-
解决vue的 v-for 循环中图片加载路径问题
-
angular4中*ngFor不能对返回来的对象进行循环的解决方法
-
Spring 项目常用pom文件的依赖
-
Spring Boot报错:No session repository could be auto-configured, check your configuration的解决方法
-
Java 跳出递归循环问题解决办法
-
spring cloud feign不支持@RequestBody+ RequestMethod.GET报错的解决方法
-
【spring-boot 源码解析】spring-boot 依赖管理
-
Spring中循环依赖的解决方法详析
-
spring定时任务执行两次及tomcat部署缓慢问题的解决方法
-
【spring-boot 源码解析】spring-boot 依赖管理梳理图