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

【spring】spring如何解决bean的循环依赖

目录

      • 一、如何解决循环依赖
      • 二、二级缓存能不能解决循环依赖
      • 三、多例bean的循环依赖spring是否解决
      • 四、构造参数的循环依赖spring是否解决

一、如何解决循环依赖

  • 1.通过三级缓存(map)
  • 2.一级缓存:存储完整的Bean,(关键是一定要有一个缓存保存它的早期对象作为死循环的出口)
  • 3.二级缓存:避免多重循环依赖的情况,重复创建动态代理
  • 4. 三级缓存:缓存的是函数接口,通过lambda表达式把方法传进去(把bean的实例和bean的名字传进去)(可能会有aop创建),但不会立即调用(如果在实例化后立即调用,所有aop不管bean是否循环依赖都会在实例化后创建proxy,但spring希望正常bean遵循生命周期,在初始化创建动态代理),第二次getBean的时候才会去调用三级缓存(实现了aop才会创建动态代理,没有实现则返回bean的实例),放入二级缓存(避免被多个依赖而重复创建),并从三级缓存中删除

二、二级缓存能不能解决循环依赖

  • 1.如果只是死循环的问题,一级缓存就可以解决,但无法避免在并发下获取不完整的bean
  • 2.二级缓存也可以解决循环依赖,但如果出现重复循环依赖,会多次创建aop的动态代理

三、多例bean的循环依赖spring是否解决

  • 1.多例bean不会使用到缓存进行存储,因为多例bean每次使用都需要重新创建
  • 2.不缓存早期的对象就无法解决循环依赖

四、构造参数的循环依赖spring是否解决

  • 1.构造函数的循环依赖没有解决
  • 2.可以人工通过@Lazy延迟加载解决,不会立即创建依赖的bean,而是等到用到时才通过动态代理进行创建

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

相关文章:

  • 2024年12月大语言模型最新对比:GPT-4、Claude 3、文心一言等详细评测
  • linux下各文件类型与作用
  • 《计算机组成及汇编语言原理》阅读笔记:p86-p115
  • springboot477基于vue技术的农业设备租赁系统(论文+源码)_kaic
  • Springboot + vue3 实现大文件上传方案:秒传、断点续传、分片上传、前端异步上传
  • 24.12.23 注解
  • Java的二叉树、红黑树、B+树
  • 项目实战典型案例26——nacos的命名空间名称和id不一致带来的思考
  • C语言/动态通讯录
  • 10个最频繁用于解释机器学习模型的 Python 库
  • 全国自学考试03708《中国近现代史纲要》重点复习精要
  • 微信小程序搭建流程
  • Python+Yolov8目标识别特征检测
  • HTTP 缓存的工作原理
  • springboot健身房管理系统
  • 【云原生·Docker】常用命令
  • 「ML 实践篇」分类系统:图片数字识别
  • Java每日一练(20230313)
  • 编辑器进化 VSCode + Vim
  • AutoSAR NM【一文读懂网络管理接口】
  • 数据结构——顺序表
  • Docker Registry部署镜像私有仓库及鉴权认证
  • React 架构流程概览
  • Opencv项目实战:22 物体颜色识别并框选
  • Qt(c++)调用海康威视监控摄像头
  • 女神节告白代码