问题
public class A{
@Autowire
private B b;
}
public class B{
@Autowire
private A a;
}
这种情况是不是spring需要先实例化A(或者先B),实例化A之后填充属性的时候发现还需要依赖B然后需要实例化B,实例化B之后发现还需要填充属性A,然后是不是又要去实例化A,这不就造成死循环了吗,spring是怎么解决这种互相依赖的?
图解:
总结
其实最主要的就是 singletonFactories 这个map,A会先实例化好对象,然后把对象放到这个map中去,然后再填充属性的时候需要依赖注入B,实例化B的之后,往B填充属性的时候,依赖注入A,这时候会从singletonFactories这个map中获取对象,但是这个对象还没有完成属性填充和初始化,B拿到A的对象之后,B进行属性填充和bean的初始化,然后依赖注入给了A对象,完成循环依赖。