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 的工厂方法。

 

posted on 2024-10-01 14:41  towboat  阅读(18)  评论(0编辑  收藏  举报