【Spring】注解的循环依赖问题

@Service
public class TestService1 {

    @Autowired
    private TestService2 testService2;

    public void test1() {
    }
}

@Service
public class TestService2 {

    @Autowired
    private TestService1 testService1;

    public void test2() {
    }
}

我们看到这里面出现了循环依赖问题。

spring内部有三级缓存:

  • singletonObjects 一级缓存,用于保存实例化、注入、初始化完成的bean实例
  • earlySingletonObjects 二级缓存,用于保存实例化完成的bean实例
  • singletonFactories 三级缓存,用于保存bean创建工厂,以便于后面扩展有机会创建代理对象。

Spring的三级缓存对于循环依赖问题有很好的帮助,
一级保存实例化、注入完成、初始化的实例
二级只保存实例化的实例
三级只保存bean创建工厂。
t1实例化,将自己添加进三级缓存,注入阶段在一级缓存找不到t2,则实例化t2,t2放进三级缓存,将t1从三级缓存拿出来注入,
并把自己t2添加到二级缓存,t2初始化完成,放进一级缓存,t1从一级缓存拿出t2完成初始化,并添加进一级缓存。
原文地址:https://www.cnblogs.com/cckong/p/14623606.html