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完成初始化,并添加进一级缓存。
  • 相关阅读:
    mysql 单表下的字段操作_查询
    mysql 表的操作
    mysql 单表下的字段操作
    mysql库的操作
    vim 复制&粘贴
    将系统剪贴板的内容粘贴到vim
    nc替代ping
    kali 将家目录下的中文文件名修改成英文
    Shiro反序列化漏洞检测、dnslog
    mac命令行切换python版本
  • 原文地址:https://www.cnblogs.com/cckong/p/14623606.html
Copyright © 2011-2022 走看看