springbean三级缓存
时间: 2023-09-14 19:12:18 浏览: 95
Spring框架中的Bean实例化过程中,涉及到三级缓存的概念。这三级缓存用于解决循环依赖的问题。
第一级缓存是singletonObjects,它是一个ConcurrentHashMap类型的缓存,用于存放完全初始化好的单例Bean。当Spring创建一个Bean时,会将其放入第一级缓存。
第二级缓存是earlySingletonObjects,它也是一个ConcurrentHashMap类型的缓存,用于存放提前曝光(尚未完全初始化)的单例Bean。在创建完Bean并且完成属性注入后,会将其放入第二级缓存。
第三级缓存是singletonFactories,它是一个ConcurrentHashMap类型的缓存,用于存放ObjectFactory,即获取Bean实例的方法。当从第二级缓存中获取不到Bean时,会调用ObjectFactory的getObject方法去创建Bean,并将其放入第三级缓存。
总的来说,三级缓存的作用是在Bean实例化过程中解决循环依赖问题。当出现循环依赖时,Spring会通过提前曝光尚未完全初始化的Bean来解决依赖关系,最终完成Bean的创建和初始化工作。
相关问题
springbean 三级缓存中一级缓存
在Spring框架中,Bean的缓存是通过三级缓存实现的。其中级缓存就是指单例Bean的缓存。
当我们首次通过Spring容器获取一个单例Bean时,Spring会先从一级缓存中查找是否已经存在该Bean的实例。如果存在,则直接返回该实例;如果不存在,则继续执行后续步骤。
在后续的步骤中,Spring会尝试从二级缓存中获取Bean的实例。二级缓存是一个用于存储原始的Bean定义信息的缓存,它是为了解决循环依赖问题而存在的。如果二级缓存中存在Bean的定义信息,则Spring会根据这些信息创建一个新的Bean实例,并放入一级缓存中,然后返回该实例。
如果二级缓存中不存在Bean的定义信息,或者在创建Bean实例时出现了循环依赖问题,那么Spring会继续执行后续步骤。
在后续步骤中,Spring会尝试从三级缓存中获取Bean的实例。三级缓存是一个用于存储已经创建但是尚未初始化完成的Bean实例的缓存。如果三级缓存中存在Bean的实例,则Spring会使用这个实例,并将其放入一级缓存中,然后返回该实例。
如果三级缓存中不存在Bean的实例,或者在初始化Bean实例时出现了异常,那么Spring会继续执行后续步骤。
在后续步骤中,Spring会根据Bean的定义信息创建一个新的实例,并将其放入一级缓存中,然后返回该实例。
总结一下,一级缓存就是用于缓存单例Bean实例的,它是Spring中Bean缓存机制的第一层。一级缓存的存在可以提高Bean的获取效率,避免重复创建实例。
spring bean的三级缓存
Spring的三级缓存是用来解决循环依赖问题的机制。它包含以下三个缓存:
1. singletonObjects缓存:用来存放已经完全初始化的单例Bean实例,也就是最终被返回的单例Bean实例。在缓存中,Bean的名字和Bean实例以键值对的形式存在。
2. earlySingletonObjects缓存:用来存放已经创建但还未完成初始化的单例Bean实例。这些Bean实例通常是因为依赖其他Bean实例而无法完成初始化,处于不完整状态。
3. singletonFactories缓存:用来存放Bean实例的工厂对象,这些工厂对象可以用来创建单例Bean实例。当Bean实例处于循环依赖关系时,Spring会先创建一个用于创建Bean实例的工厂对象,放入singletonFactories缓存中。
阅读全文