Spring三级缓存是Spring框架为了解决循环依赖问题而引入的一种机制。在Spring的单例Bean创建过程中,Spring IoC容器使用三级缓存来确保即使存在循环依赖,也能正确地初始化Bean。
1. 一级缓存(SingletonObjects):
这是最基本的缓存,用于存储完全初始化好的单例Bean。当Bean创建完成并且所有依赖都已经注入后,它会被放入这个缓存中。
2. 二级缓存(earlySingletonObjects):
这个缓存用于存储早期暴露的对象。当Bean的实例被创建后,但依赖还没有全部注入之前,该Bean会被放入这个缓存。这样,如果其他Bean在创建过程中尝试获取这个Bean的引用,Spring可以从这个缓存中提供一个早期的对象引用。
3. 三级缓存(singletonFactories):
这是一个工厂对象的缓存。当Bean的实例被创建,但还没有放入二级缓存之前,Spring会创建一个工厂对象,该工厂对象能够生成这个Bean的实例。这个工厂对象会被放入三级缓存中。如果其他Bean在创建过程中需要这个Bean的引用,Spring会使用这个工厂对象来生成一个早期对象引用。
以下是Spring解决循环依赖的大致过程:
1. 当一个Bean A正在创建过程中,Spring会先为Bean A创建一个早期对象,并把这个对象的工厂放入三级缓存(singletonFactories)。
2. 如果此时Bean