zoukankan      html  css  js  c++  java
  • 【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完成初始化,并添加进一级缓存。
  • 相关阅读:
    避免前置声明
    CLion在WSL上远程调试代码设置
    push_back与构造函数
    _BLOCK_TYPE_IS_VALID(pHead->nBlockUse问题解析
    Qt报错
    关于引用与指针实现多态的一些记录
    Vue-Axios异步通信
    Kafka概述
    学习Ajax看着一篇就够了
    学习Json看着一篇就够了
  • 原文地址:https://www.cnblogs.com/cckong/p/14623606.html
Copyright © 2011-2022 走看看