当前位置: 首页 > article >正文

spring中解决循环依赖的方法

为了避免这种循环依赖问题,Spring 引入了三级缓存的机制,分为:

  1. 一级缓存singletonObjects):这是存放已经完全创建好的单例 Bean 的缓存。当 Bean 完全初始化并且可以被使用时,会存放在这里。

  2. 二级缓存earlySingletonObjects):这是一个存放 Bean 的“早期引用”的缓存。它保存的是那些已经实例化但是还没有完全初始化完成的 Bean(例如,还没有设置完所有依赖的 Bean)。这个缓存用于解决 Bean 依赖于自己的问题。

  3. 三级缓存singletonFactories):这是存放 ObjectFactory 的缓存,它实际上是一个工厂,用来生成 Bean 实例。当 Spring 创建 Bean 时,会先将一个 ObjectFactory 放入这个缓存中,这个工厂在被调用时会返回一个正在创建的 Bean 的实例。

注意,这里二级缓存中的早期引用,是解决循环依赖的关键。早期引用就是指一个 Bean 在刚被实例化,没初始化之前,Spring 会将它放入二级缓存中,以便其他 Bean 在需要的时候能够提前依赖它。

Spring 会将 AB 都放入一级缓存(singletonObjects),表示它们已经完全初始化,可以正常使用


http://www.kler.cn/a/524395.html

相关文章:

  • 在线课堂小程序设计与实现(LW+源码+讲解)
  • Baklib揭示内容中台与人工智能技术的创新协同效应
  • Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
  • 快速提升网站收录:内容创作的艺术
  • MySQL通过binlog恢复数据
  • uniapp使用uni.navigateBack返回页面时携带参数到上个页面
  • 【llm对话系统】大模型源码分析之llama模型的long context更长上下文支持
  • 电路研究9.2.4——合宙Air780EP中MQTT 相关命令使用方法研究
  • 数仓ETL测试
  • 【华为OD-E卷 - 最长方连续方波信号 100分(python、java、c++、js、c)】
  • 【电工基础】2.低压带电作业定义,范围,工作要求,电工基本工具
  • CSS基础语法(全)
  • pytorch实现主成分分析 (PCA):用于数据降维和特征提取
  • 解决ImportError: cannot import name ‘notf‘
  • 虚幻基础10:isValid
  • go到底是什么意思:对go的猜测或断言
  • Clojure语言的系统运维
  • Deepseek的RL算法GRPO解读
  • PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践
  • 10.6.3 XML文件读写
  • Brave132 编译指南 Windows 篇:配置 Git(四)
  • 图论——最小生成树的扩展应用
  • 流浪动物救助微信小程序springboot+论文源码调试讲解
  • AI学习指南Ollama篇-Ollama性能优化与监控
  • JDK15主要特性
  • 算法-加油站问题