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

java 框架

目录

  • Spring 如何解决 bean 的循环依赖?
  • 什么是 AOP?Spring 如何实现的?
  • BeanFactory 和 ApplicationContext 有什么区别?
  • 介绍一下 Spring bean 的生命周期
  • Spring 的隔离级别
  • Spring 框架用到了哪些设计模式?并举出典型例子

Spring 如何解决 bean 的循环依赖?

Spring中引入三级缓存是为了解决循环依赖问题。循环依赖是指在创建bean的过程中,存在两个或多个bean相互依赖的情况,形成一个闭环。这样的情况下,如果没有合适的机制来解决循环依赖,会导致bean的创建陷入死循环,最终导致应用程序无法启动或抛出异常。

三级缓存是Spring用来处理循环依赖的特殊机制,其原理如下:

  1. 第一级缓存(singletonObjects):当Spring创建一个bean时,会先检查是否有其它的实例正在创建中(即是否在第二级缓存earlySingletonObjects中),如果是,则返回尚未填充属性的实例。如果没有,则创建一个"空壳"(即一个空的bean实例),将其放入第一级缓存singletonObjects中,并继续创建bean的其他依赖。

  2. 第二级缓存(earlySingletonObjects):当创建bean时,如果发现依赖的其他bean正在创建中(即已经在第一级缓存singletonObjects中),则将正在创建的bean放入第二级缓存earlySingletonObjects中,作为一个尚未填充属性的实例。

  3. 第三级缓存(singletonFactories):当创建bean时,如果发现依赖的其他bean还未创建完成(即还没有放入第一级缓存singletonObjects中),则将创建bean所需的ObjectFactory放入第三级缓存singletonFactories中。

通过这三级缓存的机制,Spring能够在创建bean的过程中解决循环依赖问题。当遇到循环依赖时,Spring会提前暴露正在创建的bean对象,然后继续创建其他依赖的bean,最终再回过头来填充这些“空壳”,从而解决了循环依赖的问题。

需要注意的是,三级缓存主要用于解决单例作用域的bean的循环依赖问题,对于原型作用域的bean,Spring无法解决循环依赖。

什么是 AOP

http://www.lryc.cn/news/108814.html

相关文章:

  • 死锁的发生原因和怎么避免
  • visual studio 生成dll文件以及修改输出dll文件名称操作
  • 【Leetcode】73.矩阵置零
  • zabbix监控mysql容器主从同步状态并告警钉钉/企业微信
  • ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC
  • 落地数字化管理,提升企业市场竞争力
  • 2023华数杯数学建模竞赛C题思路解析
  • Photon之如何解决Photon Server无法在局域网使用的bug
  • Redis两种持久化方案RDB持久化和AOF持久化
  • 银河麒麟v10 vnc环境配置
  • 【动态内存管理助力程序优化与性能飞升】
  • 电动汽车设计、制造、研发的学科、技术和前沿科技综述
  • NsPack3.x脱壳手记
  • 在.net 6.0中 调用远程服务器web服务,Webservices(xxx.asmx) ,RESTful 风格,2种解决方案。
  • 深度学习基础01-深度学习简介
  • Flink DataStream API详解
  • 【如何使用cv::erode()函数对图像进行腐蚀操作】
  • C++数据结构之BST(二叉搜索树)的实现
  • QT以管理员身份运行
  • java中的缓冲流
  • 【小吉带你学Git】idea操作(1)_配置环境并进行基本操作
  • DP-GAN-生成器代码
  • 2020-2023中国高等级自动驾驶产业发展趋势研究
  • JDK19 - synchronized关键字导致的虚拟线程PINNED
  • 用msys2安装verilator并用spinal进行仿真
  • 【ARM64 常见汇编指令学习 13 -- ARM 汇编 ORG 伪指令学习】
  • Vue使用QuillEditor富文本编辑器问题记录
  • spring AOP学习
  • 16.M端事件和JS插件
  • Zebec APP:构建全面、广泛的流支付应用体系