1. 完全初始化的单例对象缓存(singletonObjects
)
- 功能: 这个缓存用于存储已经完全初始化并可以使用的单例 bean 实例。
- 存储内容: 当一个 bean 完成初始化,包括所有的依赖注入和后处理之后,它会被放入这个缓存中。之后,对该 bean 的请求将直接返回这个缓存中的实例。
2. 早期曝光的单例缓存(earlySingletonObjects
)
- 功能: 这个缓存用于存储那些尚未完成初始化的 bean 实例,主要用于解决循环依赖问题。
- 存储内容: 在 bean 实例化过程中,如果发现需要依赖另一个尚未完成初始化的 bean,Spring 会将当前未完成的 bean 暴露到这个缓存中。这样,其他 bean 可以在构造过程中获取该未完成的实例。
3. 注册的单例缓存(singletonFactories
)
- 功能: 这个缓存保存的是可以用来创建单例对象的工厂方法。
- 存储内容: 当创建单例 bean 时,Spring 会在这个缓存中注册一个
ObjectFactory
,它提供了创建 bean 的能力。这些工厂方法会在 bean 完成初始化后被调用,从而将完整的 bean 实例放入singletonObjects
缓存中。举个例子,循环依赖的处理: -
- 当 Spring 试图创建一个 bean(比如
A
)时,如果它发现需要的依赖(比如B
)还没有完成初始化,它会将正在创建的A
实例暴露到earlySingletonObjects
中。 - 然后,它会在
singletonFactories
中注册一个用于创建A
的工厂方法。
- 当 Spring 试图创建一个 bean(比如
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!