spring 三级缓存 详细过程
时间: 2023-10-29 21:06:14 浏览: 79
Spring的三级缓存指的是BeanFactory的三级缓存。它的详细过程如下:
1. Spring在初始化BeanFactory时,会先创建一个名为singletonObjects的ConcurrentHashMap对象,用于存储已经创建的单例Bean对象。
2. 在BeanFactory中,Spring会维护一个名为earlySingletonObjects的ConcurrentHashMap对象,用于存储创建中的Bean对象。这个Map中存储的是已经经过实例化但还未完成属性填充和初始化的Bean对象。
3. 在BeanFactory中,Spring还维护了一个名为singletonFactories的ConcurrentHashMap对象,用于存储Bean的创建工厂对象。这个Map中存储的是Bean创建过程中所使用的创建工厂对象,即BeanDefinition对象,而不是真正的Bean实例。
当一个Bean被请求时,Spring会按照如下顺序尝试从缓存中获取Bean:
1. 首先,Spring会尝试从singletonObjects中获取Bean对象。如果能够获取到Bean对象,则直接返回。
2. 如果singletonObjects中不存在Bean对象,则Spring会尝试从earlySingletonObjects中获取Bean对象。
- 如果能够获取到Bean对象,则将其移动到singletonObjects中,并返回该对象。
- 如果earlySingletonObjects中也不存在Bean对象,则进入下一步。
3. 最后,Spring会尝试从singletonFactories中获取Bean创建工厂对象。如果存在Bean创建工厂对象,则Spring会使用该对象完成Bean的创建,并将创建的Bean对象存储到singletonObjects和earlySingletonObjects中。
- 如果singletonFactories中也不存在Bean创建工厂对象,则进入下一步。
4. 如果以上三个缓存中都无法获取到Bean对象,则Spring会按照正常的Bean创建流程来创建该Bean对象。
在Bean实例化和初始化完成后,该Bean对象会被存储到singletonObjects中,并从earlySingletonObjects中移除。这样,下次请求该Bean时,就可以直接从singletonObjects中获取到Bean对象了。
阅读全文