news 2026/6/10 21:03:24

6.Spring 是如何解决循环依赖问题的?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
6.Spring 是如何解决循环依赖问题的?

Spring 是如何解决循环依赖问题的?

1、什么是循环依赖 ?

一个或多个对象之间存在直接或间接的依赖关系,这种依赖关系构成一个环形调用,有下面 3 种方式。

经典的循环依赖

A中注入了一个B;

@Component public class A { @Autowired private B b; public A(){ System.out.println("init A"); } }

B中注入了A;

@Component public class B { @Autowired private A a; public B() { System.out.println("init B"); } }
2、Spring是利用三级缓存机制来解决循环依赖问题的

DefaultSingletonBeanRegistry

// 第一级缓存 private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); //第二级缓存 private final Map<String, Object> earlySingletonObjects = new HashMap<>(16); //第三级缓存 private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);
  1. 一级缓存:单例池,用来存放已经初始化完成的单例 Bean,走完整个生命周期
  2. 二级缓存:存放原始的Bean对象,也就是说Bean里面的属性还没有进行赋(存放对象工厂生成的对象,这个对象可能是原对象,也可能是个代理对象)
  3. 三级缓存:存放Bean对象工厂,结构是 Map<String, ObjectFactory<?>>,Map 的 Value 是一个对象的工厂,用来生成原始Bean对象或者是原始对象的代理并放入到二级缓存中(打破循环依赖关键对象)
  • 如果 A 有 AOP,就返回一个代理对象;
  • 如果 A 没有 AOP,就返回原对象。
//解决循环依赖关键类: AbstractAutowireCapableBeanFactory Springboot是在613行,SpringMVC是在 588行 addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean));

当我们去调用getBean()方法的时候, Spring会先从一级缓存中去找到目标Bean,如果发现一级缓存中没有 便会去二级缓存中 去找,而如果一、二级缓存中都没有找到,意味着该目标Bean还没有实例化。于是,Spring容器会实例化目标Bean

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 19:15:43

导师推荐10个AI论文平台,本科生搞定毕业论文!

导师推荐10个AI论文平台&#xff0c;本科生搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;高效又省心 对于大多数本科生而言&#xff0c;毕业论文是大学阶段最具挑战性的任务之一。从选题到开题、撰写再到查重降重&#xff0c;每一个环节都可能让人感到压力山大。而…

作者头像 李华
网站建设 2026/6/10 20:01:16

Maven 依赖作用域实战避坑指南

在 Maven 项目开发中&#xff0c;依赖作用域的配置直接影响项目的编译、测试和打包结果&#xff0c;稍有不慎就会引发 ClassNotFoundException、依赖包冗余等问题。结合日常开发场景&#xff0c;本文整理了常见的作用域使用误区和解决方案&#xff0c;帮你精准避坑。一、 高频误…

作者头像 李华
网站建设 2026/6/10 19:17:14

豆包Ai指令85

链接&#xff1a;https://pan.quark.cn/s/2e58220cd806一份专为字节跳动豆包AI设计的实用指令与提示词合集&#xff0c;收录85条经过验证的常用模板。涵盖写作、编程、分析、营销等多个场景&#xff0c;助您快速掌握与AI高效协作的技巧&#xff0c;解锁更多深度功能与创意玩法。…

作者头像 李华