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

网站开发合同注意滨州做网站建设

网站开发合同注意,滨州做网站建设,宁波seo网络推广渠道介绍,wordpress 仿微信评论目录一,什么是循环依赖二、什么是三级缓存三、Spring框架如何解决循环依赖一,什么是循环依赖 例:类与类之间的依赖关系形成了闭环,例如A依赖了B,B依赖了C,C又依赖了A。 二、什么是三级缓存 在 Spring 框架中&#xff…

目录

  • 一,什么是循环依赖
  • 二、什么是三级缓存
  • 三、Spring框架如何解决循环依赖

一,什么是循环依赖

例:类与类之间的依赖关系形成了闭环,例如A依赖了B,B依赖了C,C又依赖了A。

二、什么是三级缓存

在 Spring 框架中,三级缓存是解决循环依赖问题的核心机制,这三级缓存本质上是三个不同作用的 Map 集合,用于存储 bean 的不同状态

  • 一级缓存(singletonObjects):存储完全初始化完成的单例 Bean(即经过实例化、属性注入、初始化方法执行后的最终成品)
    时机:当 bean 完全初始化后,会从二级缓存或三级缓存移至此缓存
  • 二级缓存(earlySingletonObjects):存储半成品 Bean(已实例化,但未完成属性注入、初始化)
    注意:此缓存中的 bean 是 “半成品”,仅能被其他 bean 引用,自身还需继续完成初始化流程。
  • 三级缓存(singletonFactories):存储 Bean 的工厂(ObjectFactory),用于 “按需创建” 半成品 Bean。当其他 Bean 首次需要引用当前 Bean 时,通过工厂生成 Bean 的早期引用(可能是原始对象或 AOP 代理对象)。

三、Spring框架如何解决循环依赖

A类依赖B类,B类依赖A类咋样解决?

我的思路:

首先创建A的时候创建一个A类工厂存入三级缓存中,然后注入B时,B还没创建,所以去创建B,先创建一个B类工存到三级缓存中,然后B又依赖A,从三级缓存中拿到A的工厂创建A的半成品,放到二级缓存中,并从三级缓存移除,B此时就可以注入A,B完成创建并放到一级缓存中,A此时也可以注入了B,A完成了创建也放到一级缓存中,并从二级缓存移除A。

注意:三级缓存中存放的工厂可以处理 AOP 代理场景,确保 B 依赖的 A 和最终生成的 A 是同一个对象(可能是代理对象),代理对象可以在AOP增强方法时使用。

A类依赖B类,B类依赖C类,C类又依赖了A咋样解决?
我的思路:
1.创建 A:
Spring 创建 A 时,将 A 的工厂对象存入三级缓存,此时 A 是 “半成品”(未完成属性注入)。
A 需要依赖 B,Spring 转而开始创建 B。
2.创建 B:
实例化 B 后,将 B 的工厂存入三级缓存。
B 需要依赖 C,Spring 转而开始创建 C。
3.创建 C:
实例化 C 后,将 C 的工厂存入三级缓存。
C 需要依赖 A,此时 Spring 尝试获取 A:
从三级缓存中获取 A 的工厂,通过工厂生成 A 的早期引用(可能是原始对象或代理对象),并将 A 移至二级缓存,同时删除三级缓存中的 A 工厂。
C 成功注入 A,完成属性注入和初始化,最终 C 被存入一级缓存。
4.继续创建 B:
B 依赖的 C 已存在于一级缓存,B 注入 C 后完成初始化,存入一级缓存。
5.继续创建 A:
A 依赖的 B 已存在于一级缓存,A 注入 B 后完成初始化,A从早期的二级缓存移除,并放到一级缓存中。
注意:无论循环依赖的链条多长,只要是单例 Bean 且使用 setter 注入,Spring 都能通过这种三级缓存的协作机制来解决,核心是通过提前暴露对象引用并合理管理不同状态的 Bean 缓存。

http://www.dtcms.com/a/470026.html

相关文章:

  • Linux系统编程01:进程概念(万字图文解析)
  • 前端通用AI rules定义,适用于Cursor ,Trae,Qorder等AI开发工具
  • Go 协程在实际项目中的应用详解
  • 最简单的做网站南沙滩网站建设
  • Hive 知识点梳理
  • MySQL常见报错分析及解决方案总结(15)---Can’t connect to MySQL server on ‘localhost‘ (10061)
  • 网站上做的vi设计是怎么做的互联网设计公司排名
  • jetson orin nane 编译 paddle
  • 兰州网站卡法百度网页收录
  • [1-02-05].第04章:Win工具
  • 软件需求规格说明书(SRS)标准模板与编写指南——含功能需求、非功能需求、接口设计与验收标准
  • VS 2022 中创建一个最小的 Django 项目
  • 建设网站的功能定位是什么原因网站建设模版
  • 网站建设教程书籍免费下载网站是公司域名是个人可以吗
  • 编译原理机测客观题(3)自顶向下语法分析练习题
  • [学习日记][springboot 1-7][leetcode 6道]
  • 双榜加冕!赛博威入选第一新声AI Agent厂商图谱与AI产业创新先锋榜单
  • YOLO 目标检测算法全解析:原理、分类与性能指标
  • 华为5736交换机 dhcp静态绑定方法
  • 网站建设要求 优帮云合肥seo网站管理
  • LeetCode 3186.施咒的最大总伤害:动态规划+双指针——O(1)空间(暂未发现其他O(1)空间的题解)
  • LeetCode 热题 100(持续更新版)
  • 网站开发 jsp开发工具网页设计介绍说明
  • 沈阳网站建站推广湖南网站建设效果
  • 会员体系搭建攻略讲解:从分层运营到提升用户忠诚度
  • Merkle Tree(默克尔树)原理分析
  • Vue3 学习笔记 8:其它 API
  • 库早报|15999元!先临三维发布口袋式3D扫描仪;激光制造与增材制造大会延期;拓竹双项入选《时代》年度发明榜
  • 流量网站建设教程电子商务网站建设php
  • React中Element、Fiber、createElement和Component关系