1 注入是如何解决循环依赖问题的? 构造注入为啥解决不了循环依赖?
- 构造注入解决不了:因为构造方法创建实例,每次都要new一个要构造的实例bean,而A创建时,依赖B,就去创建B,B又依赖了A,继续构造A,如此循环下去 A(B) B(A) A(B)->....
- 设值注入:使用三级缓存来解决循环依赖问题;构造的对象使用无参构造方法,会把A先放入二级缓存(前置也会把A的工厂方法放到三级缓存),后面B,会从二级缓存中获取A(中间态)完成属性设置,B就直接进入了一级缓存中,递归回A,最后也进入一级缓存。
2 源码位置
- 1级放成品
- 2级是中间态
- 3级是lamb工厂方法