【Spring】循环依赖

一、什么情况下会出现循环依赖?

 二、解决方案

(一)一级缓存:存放完整的Bean实例对象

 缺点:一级缓存的方式无法保证多线程下的一级缓存Bean的完整性,可以用加锁的方式来解决此问题

(二)一级缓存+锁:保证多线程bean创建问题

 (三)二级缓存:判断循环是不是依赖

 (四)三级缓存:解决AOP代理问题,存放函数接口

        bean需要在实例化后进行代理,所以此处存放函数接口,在实例化时执行代理,进行解耦。

 三、其他问题

(一)多线程下如何避免获取不完整的bean?

 (二)三级缓存的作用

  • 一级缓存的作用:用于存放完整的bean对象;
  • 二级缓存的作用:用于判断两对象之间的依赖是不是循环依赖;
  • 三级缓存的作用:用于解决AOP代理的问题,存放函数接口。
  • 对二级缓存下的所有代码加锁:避免多线程情况下获取到不完整的bean对象。
  • 创建bean前对二三级缓存加锁并再次从一级缓存中获取bean:防止下面这种情况:多线程下,一个线程刚判断完一二三级缓存中没有bean,此刻另一个线程刚好创建了一个完整bean。
  • Spring中没有解决构造函数的循环依赖,多例存在循环依赖则直接抛出异常。


参考:循环依赖| ProcessOn免费在线作图,在线流程图,在线思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/30133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue项目之MOBA类游戏攻略分享平台(java项目源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的MOBA类游戏攻略分享平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者&#xf…

Git操作方法

目录 Git是什么 Git特点 Git作用 Git原理 集中式 分布式 Git安装 修改语言 Git操作 1.初始化Git仓库 2.提交工作区的内容到版本库 3.查看版本记录 4.版本回退 5.版本前进 Git 命令 通用操作 工作状态 版本回退 版本前进 远程仓 1.GitHub 2.GitLab 3.码云…

2022年山东省职业院校技能大赛网络搭建与应用赛项网络搭建与安全部署服务器配置及应用

2022年山东省职业院校技能大赛 网络搭建与应用赛项 第二部分 网络搭建与安全部署&服务器配置及应用 竞赛说明: 一、竞赛内容分布 竞赛共分二个模块,其中: 第一模块:网络搭建及安全部署项目 第二模块:服务器…

后端(三):后端实战(表白墙的设计)

上一章结束了 Servlet 的学习,ok,现在我们已经学会了 1 1 了,现在开始我们要学会 百以内的加减乘除法。 本章就做一个最简单的 小小项目:表白墙。 在开始表白墙项目开始之间,我们先提前说好,这里主要跟关…

使用yolox训练自己的数据集并测试

1.首先给出yolox原模型的下载地址: ​​​​​​https://github.com/bubbliiiing/yolox-pytorch 百度网盘链接给出自己完整的模型(包括数据集以及权重文件): 链接:https://pan.baidu.com/s/1JNjB42u9eGNhRjr1SfD_Tw 提取码&am…

线程的创建和使用(二)

1、线程的类和方法 Thread类是JVM用来管理线程的一个类,换句话说,每个线程都有唯一一个的Thread对象与之关联。 1.1、Thread的常见方法 方法说明Thread()创建线程对象Thread(Runnable target)使用Runnable对象创建线程对象Thread(String name)创建线程…

Python中对基本文件操作

1.文件的作用 保存数据放在磁盘中 2.打开文件 fopen(‘文件’,‘w’)或者fopen(‘文件’,‘r’) 3.文件操作 3.1 写数据(write) 如果文件不存在那么创建,如果存在那么就先清空,然后写入数据 对象open(“文件”,w) 对象.write(“写入数…

【数据结构与算法】04 哈希表 / 散列表 (哈希函数、哈希冲突、链地址法、开放地址法、SHA256)

一种很好用,很高效,又一学就会的数据结构,你确定不看看? 一、哈希表 Hash Table1.1 核心概念1.2 哈希函数 Hash Function1.3 哈希冲突 Hash Collision1.4 哈希冲突解决1.41 方法概述1.42 链地址法 Separate Chaining1.43 开放寻址…

C语言学习笔记:指针

✨博文作者:烟雨孤舟 💖 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教! 目录 简介 …

企业会计软件必备!深入了解为何选择会计软件以及其带来的好处

随着科技的发展,企业需要更加智能化和数字化的财务管理方式,因此会计软件是现代社会的必然产物,会计软件可以帮助企业更有效地进行财务管理。 企业为什么需要会计软件? 提高准确度 通过传统的手工操作财务记录,会有很…

Linux常用命令——gcc命令

在线Linux命令查询工具 gcc 基于C/C的编译器 补充说明 gcc命令使用GNU推出的基于C/C的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC…

【MySQL数据库】MySQL日志管理、备份与恢复

MySQL日志管理、备份与恢复 一、MySQL日志管理1.1日志存放位置 二、数据备份2.1物理备份与逻辑备份2.2完整备份、差异备份、增量备份2.3常见的备份方法 三、完整备份与恢复3.1物理冷备份与恢复3.2mysqldump 备份3.3mysqldump数据恢复3.4MySQL增量备份3.5MySQL增量恢复 一、MySQ…

【开发细节】SpringBoot配置文件的spring.profiles下的active和include属性的区别和作用

目录 问题作用spring.profiles.activespring.profiles.include 总结 问题 我们经常在项目的application.yml中看到这样的配置,如下: 在 Spring Boot 中,spring.profiles.active 和 spring.profiles.include 属性都是用来配置 profile 的。 …

【VB6|第18期】基于libxl导出Excel之导出失败的解决方案

日期:2023年6月12日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

安装Hive

安装Hive 准备 安装Java环境:Hive需要Java环境支持,所以需要先安装Java。安装文档:http://t.csdn.cn/deBJu 安装MySQL数据库。http://t.csdn.cn/d24pN 下载Hive 下载Hive的二进制文件。 链接:https://pan.baidu.com/s/1fdg7…

ubuntu 22.04部署dzzoffice及安装onlyoffice插件

目录 一、配置阿里源 二、安装数据库 三、安装依赖组件 (一)安装php7.4 (二)安装apache2 四、下载 dzzoffice 五、安装dzzoffice 六、安装onlyoffice插件 (一)从github下载小胡版onlyoffice替代原来…

Spring MVC 的创建连接和使用

目录 前言: MVC 是什么? 1. Spring MVC 项目的创建和连接: 1.1 创建 1.2 连接 2. RequestMapping 注解使用详析: 2.1 指定请求类型: 2.1.1 指定 GET 请求 2.1.2 指定 POST 请求 3. 参数的获取与传递: 3.1 传…

若依微服务 + seata1.5.2版本分布式事务(安装配置nacos+部署)

若依官方使用的1.4.0版本seata,版本较低配置相对更麻烦一些 一、seata服务端下载,下载方式介绍两种入口,如下: 1、找到对应版本,下载 binary 即可。 下载包名为:seata-server-1.5.2.zip 2. github上下载 …

Stable Diffusion WebUI 本地安装教学

Stable diffusion AI的绘图工具,这是一种扩散模型,可以通过不断去噪来获得最终的艺术作品。这款工具是当前最受欢迎的AI绘图工具之一,不仅是还是开源的,而且其中的AUTOMATIC111 Stable-diffusion-webui版本深受AI绘图玩家的喜爱&a…

《统计学习方法》——条件随机场#习题解答#

引言 这是统计学习方法第十一章条件随机场的阅读笔记,包含所有公式的详细推导。 条件随机场(conditional random field,CRF)是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。 建议先阅…