关于spring autowired出现循环依赖的问题

618 阅读1分钟

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过源码,还是有很多和理论上不一致的地方。