03-循环依赖

实例化bean是一个比较复杂的过程,在factory构造对象后,还要进行初始化,这其中就包括了依赖检测和循环依赖的解决。

1. 什么是循环依赖

循环依赖即环状引用,两个或者以上bean相互持有对方的引用,变成一个环状。

2. Spring是如何解决的

  1. 构造循环依赖
    这类依赖是无法解决的,只能抛出BeanCurrentlyInCreationException
  2. setter循环依赖
    表示通过setter注入方式构成的循环依赖,Spring仅能解决单例的循环依赖,因为Spring会提前构建和缓存好单例的bean实例,而其他模式不会。具体流程如下图所示:
    Spring循环依赖解决

作者 @Brady
2016年8月10日