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

Spring是怎么解决循环依赖的

首先先解释一下什么叫循环依赖

循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环.比如A依赖于B,B依赖于A

循环依赖在spring中是允许存在的,spring框架依据三级缓存已经解决了大部分的循环依赖

一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象

二级缓存:缓存早期的bean对象(声明周期还没有走完)

三级缓存:缓存的是ObjectFactory,标识对象工厂,用来创建某个对象的

spring通过三级缓存来解决循环依赖的问题,具体解决过程如下:

1.创建对象:当Spring容器创建一个Bean时,会先创建一个空的对象,并将其到"singletonFactories"缓存中.

2.属性注入:spring会将该对象的属性注入到其他依赖的Bean中

3.提前暴露:在属性注入完成后,Spring会将该对象提前暴露给其他的Bean,以便其他的Bean可以引用到该对象.

4.初始化:Spring会调用该对象的初始化方法.

5.缓存对象:当该对象初始化完成后,Spring会将该对象放入到earlySingletonObjects缓存中.

6.循环依赖检测:在创建其他bean时,如果发现有循环依赖的情况,spring会从singletonFactories缓存中获取之前创建的空对象,并将其返回给依赖的bean.

7.属性充值:当循环依赖的bean被返回后,Spring会继续填充bean的属性

8初始化完成:当所有的bean的属性填充完成后,spring会调用这些bean的初始化方法.

通过以上步骤,spring能够解决循环依赖的问题,确保所有Bean都能够正确地创建和初始化

循环依赖问题AI智能回答

循环依赖报错信息

循环依赖解决流程图

循环依赖进一步追问

相关文章:

  • U盘显示空间小于实际U盘空间的解决方案
  • chisel之scala 语法
  • pip安装tf-gpu=2.4的bug解决方案
  • Vue代理模式和Nginx反向代理(Vue代理部署不生效)
  • 第3节、电机定速转动【51单片机+L298N步进电机系列教程】
  • 第一章 RocketMQ 概述
  • Java实现数据可视化的智慧河南大屏 JAVA+Vue+SpringBoot+MySQL
  • 如何使用postman进行接口调试
  • 蓝桥杯Web应用开发-CSS3 新特性【练习一:属性有效性验证】
  • 算法之美_2024
  • 【蓝桥杯冲冲冲】[NOIP2017 提高组] 宝藏
  • 《Docker极简教程》--Docker基础--基础知识(四)
  • 网络安全产品之认识准入控制系统
  • Java Map 集合的几种常用遍历方式
  • MySQL数据库常用语法回顾及知识点合集(持续更新中……)
  • 2018一半小结一波
  • 345-反转字符串中的元音字母
  • GraphQL学习过程应该是这样的
  • Linux Process Manage
  • Python连接Oracle
  • Web Storage相关
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 机器学习 vs. 深度学习
  • 排序算法之--选择排序
  • 数据仓库的几种建模方法
  • 微信小程序开发问题汇总
  • ​ssh免密码登录设置及问题总结
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #AngularJS#$sce.trustAsResourceUrl
  • #Linux(Source Insight安装及工程建立)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (06)金属布线——为半导体注入生命的连接
  • (16)Reactor的测试——响应式Spring的道法术器
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (一)SpringBoot3---尚硅谷总结
  • (一)基于IDEA的JAVA基础12
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)3D模板阴影原理
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .net core 6 redis操作类
  • .NET Core Web APi类库如何内嵌运行?
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 设计模式初探
  • .NET 事件模型教程(二)
  • .Net面试题4
  • @Repository 注解
  • @软考考生,这份软考高分攻略你须知道
  • [22]. 括号生成
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [emuch.net]MatrixComputations(7-12)
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析