spring三级缓存面试题

时间: 2023-08-19 14:17:41 浏览: 51
回答: 在Spring中,三级缓存是用来解决循环依赖问题的。一级缓存是singletonObjects,存放完整的Bean对象,可以直接使用。二级缓存是earlySingletonObjects,存放不完整的对象,即已实例化但未初始化的Bean对象,用于解决循环依赖。三级缓存是singletonFactories,存放Bean工厂对象,用于解决循环依赖。[2] 如果去掉二级缓存,假设A依赖B,B依赖A,当实例化B时,发现三级缓存有A的ObjectFactory对象,然后拿到A的实例对象,但多次调用产生的对象肯定是不一样的,所以一定要把A从三级转移到二级缓存中。因此,不能少二级缓存。[1] 如果没有三级缓存,只有一级缓存和二级缓存,是可以的。一级缓存是日常实际获取Bean的地方,二级缓存是还未进行属性注入的Bean对象。[2] 缓存的放置时间和删除时间是在Bean的实例化和初始化过程中进行的。一级缓存存放完整的Bean对象,二级缓存存放不完整的对象,三级缓存存放Bean工厂对象。[3]
相关问题

spring循环依赖三级缓存面试

Spring循环依赖的解决方式是使用三级缓存。当两个Bean相互依赖时,Spring会将其中一个Bean提前暴露出来,然后将其放入三级缓存中。当另一个Bean需要依赖这个Bean时,Spring会从三级缓存中获取已经提前暴露出来的Bean,然后完成依赖注入。 三级缓存的具体实现是通过三个Map来实现的,分别是singletonObjects、earlySingletonObjects和singletonFactories。其中singletonObjects用于存放完全初始化好的单例Bean,earlySingletonObjects用于存放提前暴露出来但还未完全初始化的单例Bean,singletonFactories用于存放创建单例Bean的工厂方法。 在循环依赖的情况下,当一个Bean被创建时,Spring会将其放入singletonFactories中,并将其提前暴露出来放入earlySingletonObjects中。当另一个Bean需要依赖这个Bean时,Spring会从earlySingletonObjects中获取这个Bean,并将其放入singletonObjects中。然后再完成另一个Bean的创建和初始化。

spring三级缓存

Spring框架中的三级缓存是指Bean的缓存机制。在Spring容器中,当我们通过getBean()方法获取一个Bean时,Spring会按照以下流程进行处理: 1. 第一级缓存:单例对象缓存 Spring会首先检查缓存中是否已经存在该Bean的实例。如果存在,则直接返回缓存中的实例,不再创建新的实例。 2. 第二级缓存:早期对象缓存 如果第一级缓存中不存在该Bean的实例,Spring会尝试从早期对象缓存中查找是否有该Bean的实例。早期对象缓存是在Bean创建过程中,还未完全初始化完成之前,在创建过程中可能会创建出一些代理对象或者尚未完全初始化的对象。如果能够找到对应的早期对象,则返回早期对象。 3. 第三级缓存:单例工厂对象缓存 如果第二级缓存中也没有找到对应的实例,Spring会尝试从单例工厂对象缓存中查找是否有该Bean的实例。单例工厂对象缓存是在Bean的创建过程中,如果出现循环依赖的情况,Spring会将正在创建的Bean放入该缓存中。如果能够找到对应的单例工厂对象,则返回该对象。 4. 创建新的Bean实例 如果以上三级缓存都没有找到对应的Bean实例,则Spring会创建一个新的实例,并放入第一级缓存中,以供下次获取时使用。 需要注意的是,这个三级缓存仅适用于单例作用域的Bean,对于其他作用域的Bean,Spring不会进行缓存处理。

相关推荐

最新推荐

recommend-type

Spring Cloud面试题2020·8(35题).pdf

Spring Cloud面试题2020·8(35题),带答案,1、什么是 Spring Cloud? Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集 成。Spring cloud Task,一个生命周期短暂的...
recommend-type

30 道 Spring Cloud 面试题及答案.docx

什么是Spring Cloud 设计目标与优缺点 设计目标 优缺点 Spring Cloud发展前景 整体架构
recommend-type

Spring Cache手动清理Redis缓存

主要介绍了Spring Cache手动清理Redis缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

Spring面试题和答案(2020年大厂必备带答案1).pdf

2020年总结的spring面试题,经典带答案哦,我收集了一些spring面试的问题,这些问题可能会在下一次技术面试中遇到。对于其他spring模块,我将单独分享面试问题和答案。 如果你能将在以前面试中碰到的,且你认为这些...
recommend-type

Spring Boot缓存实战 Caffeine示例

本篇文章主要介绍了Spring Boot缓存实战 Caffeine示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。