2.概述
bean的实例化仅仅是获得了bean的实例,该bean仍在继续创建之中,之后在该bean实例的基础之上,还要做很多额外的操作,例如bean的属性填充、处理器的应用、bean的循环依赖解决等,今天我们就来分析下Spring是如何解决bean之间的循环依赖。
当ClassA引用ClassB,ClassB又引用ClassA,那么两个类之间就会形成一个闭环,导致循环依赖的出现。大家只需记住一点,Spring只能解决单例模式下的Setter循环依赖。
2.1 循环依赖种类
- 构造函数的循环依赖。这种
依赖显然是解决不了
的。在 A 的构造方法中依赖 B,在 B 的构造方法中依赖 A 是不行的。 - 非单例Bean的循环依赖。这种依赖也是解决不了的。
- 单例Bean的循环依赖。本文介绍的就是如何解决单例Bean的循环依赖的问题。
2.2 Spring怎么解决循环依赖
Spring 在处理属性循环依赖的情况时主要是通过延迟设置来解决的,当bean被实例化后,此时还没有进行依赖注入,当进行依赖注入的时候,发现依赖的bean已经处于创建中了,那么通过可以设置依赖,虽然依赖的be