首页 > 其他分享 >解决spring循环依赖:三级缓存

解决spring循环依赖:三级缓存

时间:2024-10-01 14:33:21浏览次数:8  
标签:初始化 缓存 依赖 spring bean 实例 单例 三级

1. 完全初始化的单例对象缓存(singletonObjects

  • 功能: 这个缓存用于存储已经完全初始化并可以使用的单例 bean 实例。
  • 存储内容: 当一个 bean 完成初始化,包括所有的依赖注入和后处理之后,它会被放入这个缓存中。之后,对该 bean 的请求将直接返回这个缓存中的实例。

2. 早期曝光的单例缓存(earlySingletonObjects

  • 功能: 这个缓存用于存储那些尚未完成初始化的 bean 实例,主要用于解决循环依赖问题。
  • 存储内容: 在 bean 实例化过程中,如果发现需要依赖另一个尚未完成初始化的 bean,Spring 会将当前未完成的 bean 暴露到这个缓存中。这样,其他 bean 可以在构造过程中获取该未完成的实例。

3. 注册的单例缓存(singletonFactories

  • 功能: 这个缓存保存的是可以用来创建单例对象的工厂方法。
  • 存储内容: 当创建单例 bean 时,Spring 会在这个缓存中注册一个 ObjectFactory,它提供了创建 bean 的能力。这些工厂方法会在 bean 完成初始化后被调用,从而将完整的 bean 实例放入 singletonObjects 缓存中。举个例子,循环依赖的处理:
    • 当 Spring 试图创建一个 bean(比如 A)时,如果它发现需要的依赖(比如 B)还没有完成初始化,它会将正在创建的 A 实例暴露到 earlySingletonObjects 中。
    • 然后,它会在 singletonFactories 中注册一个用于创建 A 的工厂方法。

 

标签:初始化,缓存,依赖,spring,bean,实例,单例,三级
From: https://www.cnblogs.com/towboa/p/18442863

相关文章

  • SpringBoot实现的社区医疗服务信息平台
    3系统分析3.1可行性分析通过对本社区医院信息平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。3.1.1技术可行性本社区医院信息平台采用SpringBoot框架,JAVA作为开发语言,是基于WEB平......
  • SpringBoot助力社区医院信息化建设
    2相关技术2.1MYSQL数据库MySQL是一个真正的多用户、多线程SQL数据库服务器。是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适用于Web站点或者其他......
  • 使用微服务Spring Cloud集成Kafka实现异步通信(消费者)
    1、本文架构本文目标是使用微服务SpringCloud集成Kafka实现异步通信。其中KafkaServer部署在Ubuntu虚拟机上,微服务部署在Windows11系统上,KafkaProducer微服务和KafkaConsumer微服务分别注册到Eureka注册中心。KafkaProducer和KafkaConsumer之间通过KafkaServer实现异......
  • SpringBoot实现社区医院数据集成解决方案
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理社区医院信息平台的相关信息成为必然。开发合适的社区医院信息平台,可以方便管理人员对社区......
  • 社区医疗健康管理:SpringBoot技术应用
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理社区医院信息平台的相关信息成为必然。开发合适的社区医院信息平台,可以方便管理人员对社区......
  • Java项目实战II基于Java+Spring Boot+MySQL的大创管理系统(源码+数据库+文档)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者一、前言在当前创新创业氛围浓厚的背景下,大学生创新创业项目(简称“大创”)如雨后春笋般涌现,为校园内外注入了无限活力。然而,项目......
  • Java项目实战II基于Java+Spring Boot+MySQL的免税商品优选购物商城(源码+数据库+文档)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者一、前言随着全球贸易的日益繁荣和消费者需求的多样化,免税商品购物已成为众多旅行者和消费者的热门选择。为了提供一个更加便捷......
  • spring 实用小技巧
    1.@PropertySource注解加载properties文件,加载完成之后,放到了环境变量Environment当中,通过Environment对象可以直接获取代码如下所示:定义一个my.properties文件,写入两个属性:my.app.name=rjmy.app.version=1.0.0在启动类上添加注解@PropertySource,引入my.pro......
  • spring aop记录
     使用:importorg.aspectj.lang.JoinPoint;importorg.aspectj.lang.annotation.After;importorg.aspectj.lang.annotation.Before;importorg.aspectj.lang.annotation.Aspect;importorg.springframework.stereotype.Component;@Aspect@ComponentpublicclassLog......
  • 足球青训俱乐部管理:Spring Boot技术革新
    3系统分析3.1可行性分析可行性分析是该平台系统进行投入开发的基础第一步,必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用,更具有性价比和降低成本,同时也是系统平台的成功的未雨绸缪的一步。3.1.1技术可行性技术可行性一是考虑客观的技术可行性,二是......