Spring 三级缓存
时间: 2023-08-23 18:45:44 浏览: 83
Spring 中的三级缓存指的是 BeanFactory 的三级缓存。这三级缓存分别是 singletonObjects、earlySingletonObjects 和 singletonFactories。
在 Spring 中,BeanFactory 在初始化时,会将所有的 BeanDefinition 存储到一个 ConcurrentHashMap 中,这个 ConcurrentHashMap 存储了 BeanDefinition 的信息,例如 Bean 的名称、类、作用域、依赖等等。
当一个 Bean 被实例化时,Spring 会根据 BeanDefinition 中的信息创建一个 Bean 实例。在创建 Bean 实例时,Spring 会先从 singletonObjects 缓存中查找该 Bean 是否已经被创建,如果已经被创建,则直接返回该 Bean 实例;如果没有被创建,则会从 earlySingletonObjects 缓存中查找,如果存在,则说明该 Bean 正在创建中,直接返回 earlySingletonObjects 中的 Bean 实例;如果既没有在 singletonObjects 中找到,也没有在 earlySingletonObjects 中找到,则会从 singletonFactories 缓存中查找,如果存在,则说明该 Bean 已经被实例化但还没有初始化完成,直接返回 singletonFactories 中的 Bean 实例。
如果在这三级缓存中都没有找到该 Bean 实例,那么 Spring 会创建一个新的 Bean 实例,并将该实例存储到 singletonObjects 缓存中,同时将该实例存储到 earlySingletonObjects 缓存中,表示该 Bean 正在创建中。在 Bean 的初始化完成后,Spring 会将该 Bean 实例从 earlySingletonObjects 缓存中移除,并将该实例存储到 singletonObjects 缓存中。
这样的三级缓存机制可以提高 Spring 中单例 Bean 的创建效率,同时也可以保证单例 Bean 的线程安全。
阅读全文
相关推荐














