spring什么情况循环依赖不会报错

2022 1 20 spring循环依赖

style="text-indent:2em;">大家好,关于spring什么情况循环依赖不会报错很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于spring不建议循环依赖的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

  1. spring什么情况循环依赖不会报错
  2. spring如何理解循环依赖
  3. Spring Cloud的消费端与服务端该不该有依赖
  4. spring循环依赖解决方式

spring什么情况循环依赖不会报错

做正常的业务的话很少出现你说的情况。楼主在设计上可能考虑不周。你可以重新修改下各类功能。具体解决办法还得根据您做的项目来解决。

spring如何理解循环依赖

循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比方CircularityA引用CircularityB,CircularityB引用CircularityC,CircularityC引用CircularityA。形成一个环状引用关系。

在使用Spring时,如果主要采用基于构造器的依赖注入方式,则可能会遇到循环依赖的情况,简而言之就是BeanA的构造器依赖于BeanB,BeanB的构造器又依赖于BeanA。

这时候运行测试就会发现抛出了BeanCurrentlyInCreationException异常。产生这种情况的原因是,Spring在创建Bean时,会首先实例化对象,然后再注入依赖。假设Spring首先创建ClassA,那么就会发现在构造器里有ClassB的依赖,所以就会转去创建ClassB,又在ClassB的构造器里发现了对ClassA的依赖,而此时ClassA是还未初始化完的,因此又会转去创建ClassA。

换成基于setter的依赖注入即可解决这个问题。因为基于setter的依赖注入会首先调用默认构造函数来实例化对象,然后再调用setter实现依赖注入。这样在对象实例化的阶段就没有了任何依赖,因此ClassA实例化完成后再调用ClassB,ClassB实例化完成后开始设值,而这时ClassA已经是实例化完成了的,所以可以成功引用到ClassA。

Spring Cloud的消费端与服务端该不该有依赖

不建议有依赖,如果有依赖一定要做好版本化,不然每次构建结果都可能因为服务提供方的修改导致消费方的意外故障。

spring循环依赖解决方式

Spring循环依赖指两个或多个bean相互依赖,形成一个循环依赖的情况。当出现这种情况时,Spring容器无法正确地创建这些bean,会抛出BeanCurrentlyInCreationException异常。

Spring提供了三种方式来解决循环依赖的问题:

1.构造函数注入:通过将依赖项注入构造函数中,即可避免循环依赖问题的发生。这种方式将依赖关系从属性中转移到构造函数中。

2.Setter注入:使用Setter注入时,Spring会首先创建Bean实例,然后设置bean属性值。因此,即使出现循环依赖,也可以确保经过几次Setter调用后,可以得到正确的属性值。

3.使用@Autowired注解:@Autowired注解可以将依赖项自动装配到类中。此方式中,Spring会首先使用默认构造函数创建Bean实例,然后再自动注入依赖项。如果出现循环依赖,则需要使用@Lazy注解来解决循环依赖的问题。

综上所述,建议使用构造函数注入的方式来避免循环依赖的问题。

OK,关于spring什么情况循环依赖不会报错和spring不建议循环依赖的内容到此结束了,希望对大家有所帮助。

循环依赖

声明:本文内容来自互联网不代表本站观点,转载请注明出处:https://bk.oku6.com/1/83883.html

相关推荐