3个类
@service
class A{
@Autowired
private B b;
@Autowired
private C c;
}
@service
class B{
public B(C c);
}
@service
class C{
@Autowired
private B b;
}
类A是在启动的时候首先实例化的bean,此时会出现循环依赖的报错。如果把A的代码调整如下:
@service
class A{
@Autowired
private C c;
@Autowired
private B b;
}
不会出现循环依赖报错。 我以前的理解是,在实例化B的时候,构造函数依赖C,无法实例化一个空的bean,会先去实例化C。因为C不是构造函数依赖B,可以实例化一个空bean放入缓存,然后再去实例化B。但是现在的情况是直接报循环依赖,debug代码时发现,在C注入B的时候发现缓存没有可用的Bean,会报循环依赖。看来需要更深入的了解一下spring是如何解决循环依赖的,因为以前只是看了资料,没有真正debug过源码,还是有很多和理论上不一致的地方。