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

Spring循环依赖相关问题

一、面试中常见的提问方式

1、什么是循环依赖?

在这里插入图片描述

2、循环依赖怎么解决?

(1)set方法进行赋值(三级缓存解决),解决循环依赖
(2)创建一个带有参数的构造方法,没有办法解决
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源码BeanFactory接口中有完整的Bean周期的注释

那Spring是什么?
spring是一个框架,还是一个生态,为了支撑更加灵活高效的上层应用,对应spring而言,需要考虑最多的应该是扩展性、扩展性、扩展性

3、什么是Bean的生命周期?

AService.class—>无参构造方法—>普通对象—>依赖注入—>初始化前—>初始化—>初始化后(AOP)—>放入单例池Map—>Bean对象
这里如果没有重写构造方法,默认使用无参构造创建普通对象,可能有一些属性,包括一些加了@Autowired注解的属性,通过无参构造得到的对象里边属性都是空的
这里的依赖注入意思是就是给加了@Autowired注解的属性赋值
这里单例池Map(用的ConcurrentHashMap实现的单例Bean的功能)说的就是三级缓存中的一级缓存。//Map(beanName,Bean对象)

3.1、AService的bean生命周期

1.实例化—>得到AService的普通对象—>KMap<beanName,AService的普通对象>
2.给bService赋值------------>去单例池看bService在不------->没找到,创建BService
就会触发BService的生命周期

  • 2.1.实例化
  • 2.2.给aService赋值---->单例池—>没找到去KMap找—>AService的普通对象
  • 2.3.填充其他属性
  • 2.4.其他步骤(包括AOP)
  • 2.5.加入到单例池

3.填充其他属性
4.其他步骤(包括AOP) – >如果需要AOP,会产生AService代理对象
5.加入到单例池中

第一级缓存 单例池 Map<String,Object> singletonObjects
第二级缓存 Map<String,Object> earySingletonObjects
第三级缓存 Map<String,ObjectFactory<?>> singletonFactories

3.2没有找到bService怎么不给它,赋空默认值呢?

其实这里跟依赖注入有关,@Autowired点进去,required 默认true,就是说必须要有值不能为空。
AServiceProxy对象—>(通过AServiceProxy的构造方法得到)AService代理对象—>AService代理对象.target=AService普通对象
AService代理对象.test()
AService普通对象赋值给AService代理对象的target属性

class AServiceProxy extends AService{AService target;public void test(){//先切面逻辑target.test();//再执行AService普通对象.test()方法}
}

4、spring为什么要使用三级缓存来解决循环依赖问题?二级缓存能不能解决?

二级缓存虽然解决了死循环创建,但是它没有办法解决AOP代理的问题

http://www.xdnf.cn/news/604981.html

相关文章:

  • C++(初阶)(十九)——红黑树
  • LLM多轮对话效果优化之道
  • 每日c/c++题 备战蓝桥杯(修理牛棚 Barn Repair)
  • 【信息系统项目管理师】第19章:配置与变更管理 - 38个经典题目及详解
  • 【Ubuntu】如何在一个脚本文件中跑三个python文件?以及端口被占的解决方法
  • 如何最简单、通俗地理解什么是NLP?
  • el-table控制type=“expand“展开列 根据条件显示或隐藏展开按钮
  • 【萤火工场GD32VW553-IOT开发板】流水灯
  • Git子模块原理与实战详解
  • 【MATLAB代码】扩展卡尔曼滤波估计pmsm的位置误差
  • #6 百日计划第六天 java全栈学习
  • 编译原理 期末速成
  • 从零开始:Python语言进阶之继承
  • window 显示驱动开发-视频内存供应和回收(二)
  • 计算机语言&计算机安全知识
  • 十、Linux 网络服务基础
  • NLweb本地部署指南
  • EasyRTC音视频实时通话WebP2P技术赋能的全场景实时通信解决方案
  • 数据分析概述and环境配置
  • 照片时光机APP:修复老照片,重现往昔美好
  • Windows逆向工程提升之IMAGE_EXPORT_DIRECTORY
  • Git和Gitcode交互教程
  • 85. Java Record 深入解析:构造函数、访问器、序列化与实际应用
  • 关于千兆网络变压器的详细介绍
  • 【Flutter】多语言适配-波斯语RTL从右到左
  • 基于 Vue3 与 exceljs 实现自定义导出 Excel 模板
  • 如何在Mac 上使用Python Matplotlib
  • Redis 详解
  • G1人形机器人软硬件组成
  • vite学习笔记