实例化bean是一个比较复杂的过程,在factory构造对象后,还要进行初始化,这其中就包括了依赖检测和循环依赖的解决。
1. 什么是循环依赖
循环依赖即环状引用,两个或者以上bean相互持有对方的引用,变成一个环状。
2. Spring是如何解决的
- 构造循环依赖
这类依赖是无法解决的,只能抛出BeanCurrentlyInCreationException - setter循环依赖
表示通过setter注入方式构成的循环依赖,Spring仅能解决单例的循环依赖,因为Spring会提前构建和缓存好单例的bean实例,而其他模式不会。具体流程如下图所示:
作者 @Brady
2016年8月10日