Spring5中如何解析并解决单例模式的循环依赖问题?
- 内容介绍
- 相关推荐
本文共计5121个文字,预计阅读时间需要21分钟。
循环依赖是指在系统中,两个或两个以上的Bean之间存在相互依赖关系,最终形成一个闭环。例如,A依赖于B,B又依赖于A,这样它们之间就形成了循环依赖。或者,A依赖于B,B依赖于C,C又依赖于A,这也是一种循环依赖。
循环依赖示例:A依赖于B,B又依赖于A。或者A依赖于B,B依赖于C,C依赖于A。
什么是循环依赖
循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。或者是 A 依赖 B,B 依赖 C,C 又依赖 A。它们之间的依赖关系如下:
注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。
Spring中循环依赖场景有:
- 1、构造器的循环依赖
- 2、field属性的循环依赖
其中,构造器的循环依赖问题是无法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spring采用的是提前暴露对象的方法。
怎么检测是否存在循环依赖
检测循环依赖相对比较容易,Bean在创建的时候可以给该Bean打标,如果递归调用回来发现正在创建中的话,即说明了循环依赖了。
本文共计5121个文字,预计阅读时间需要21分钟。
循环依赖是指在系统中,两个或两个以上的Bean之间存在相互依赖关系,最终形成一个闭环。例如,A依赖于B,B又依赖于A,这样它们之间就形成了循环依赖。或者,A依赖于B,B依赖于C,C又依赖于A,这也是一种循环依赖。
循环依赖示例:A依赖于B,B又依赖于A。或者A依赖于B,B依赖于C,C依赖于A。
什么是循环依赖
循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。或者是 A 依赖 B,B 依赖 C,C 又依赖 A。它们之间的依赖关系如下:
注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。
Spring中循环依赖场景有:
- 1、构造器的循环依赖
- 2、field属性的循环依赖
其中,构造器的循环依赖问题是无法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spring采用的是提前暴露对象的方法。
怎么检测是否存在循环依赖
检测循环依赖相对比较容易,Bean在创建的时候可以给该Bean打标,如果递归调用回来发现正在创建中的话,即说明了循环依赖了。

