spring三级缓存都存什么

fiy 其他 33

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring框架中的三级缓存主要用于存储Bean的创建过程中的中间状态和结果。具体来说,三级缓存包括singletonObjects、earlySingletonObjects和singletonFactories。

    1. singletonObjects:
      singletonObjects缓存用于存储已经完全创建完成的Bean对象。当Bean被完全创建后,Spring会将其存储到singletonObjects中。

    2. earlySingletonObjects:
      earlySingletonObjects缓存用于存储正在创建中的Bean对象,即尚未完成依赖注入的Bean。当Bean的创建过程中,如果出现循环依赖,这时创建Bean对象会提前进入earlySingletonObjects缓存,以便其他Bean可以引用它的代理对象。

    3. singletonFactories:
      singletonFactories缓存用于存储Bean的创建工厂对象,即Bean的FactoryBean。当需要创建Bean时,Spring会先使用FactoryBean创建Bean的代理对象,并将其存储到singletonFactories缓存中。

    这三级缓存的作用是为了解决循环依赖的问题。在Spring的Bean创建过程中,如果出现循环依赖,即A依赖于B,同时B也依赖于A,这时需要使用缓存来临时存储正在创建中的Bean对象,以避免循环依赖导致的死锁和无限递归的问题。

    需要注意的是,这三级缓存是在Spring的DefaultSingletonBeanRegistry类中实现的。在Bean创建过程中,Spring会先从singletonObjects中查找Bean对象,如果没有找到则继续从earlySingletonObjects和singletonFactories中查找。当Bean对象创建完成后,会从earlySingletonObjects和singletonFactories缓存中移除,并将其存储到singletonObjects中。

    总之,Spring的三级缓存用于临时存储正在创建中的Bean对象和Bean的创建工厂对象,解决了循环依赖的问题,保证了Bean的创建过程的正确性。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring框架中的三级缓存是用来存储Bean的实例对象的,它主要用于解决循环依赖的问题。Spring的三级缓存包括singletonObjects、earlySingletonObjects和singletonFactories。

    1. singletonObjects:这是Spring中的一级缓存,用于存储完全初始化并且可以直接使用的Bean实例对象。当Spring创建一个Bean的时候,会先从一级缓存中查找是否已经存在该Bean的实例对象,如果存在则返回,否则继续创建。

    2. earlySingletonObjects:这是Spring中的二级缓存,用于存储提前创建但尚未完全初始化的Bean实例对象。当Spring创建一个Bean的时候,如果发现该Bean的构造函数中存在循环依赖关系,则会将当前正在创建的Bean对象放入二级缓存中,以便后续解决循环依赖的问题。

    3. singletonFactories:这是Spring中的三级缓存,用于存储创建Bean的工厂对象。当Spring创建一个Bean的时候,如果发现该Bean的构造函数中存在循环依赖关系,则会将当前正在创建的Bean对象的工厂对象放入三级缓存中。

    需要注意的是,三级缓存中存储的是Bean的实例对象和工厂对象,并不是完整的Bean对象。在解决循环依赖的过程中,Spring将会使用依赖查找和依赖注入的方式来完成Bean的创建和初始化。

    总的来说,Spring的三级缓存提供了一种机制,可以在创建Bean的过程中解决循环依赖的问题。通过缓存Bean的实例对象和工厂对象,Spring可以在需要的时候提前创建并暂时保存正在创建的Bean,以便后续解决循环依赖的关系。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring的三级缓存是指在创建Bean的过程中,Spring容器为了解决循环依赖问题而引入的缓存机制。三级缓存分别是singletonObjects、earlySingletonObjects和singletonFactories。接下来,将从方法、操作流程等方面讲解这三级缓存分别存储了什么内容。

    1. singletonObjects:
      singletonObjects是最终存放Bean的缓存,里面保存了完全初始化成功的Bean对象。这个缓存是BeanFactory默认的缓存实现。在getSingleton方法中,首先会尝试从这个缓存中获取Bean对象。如果获取到了,就直接返回;如果没有获取到,则继续创建Bean。

    2. earlySingletonObjects:
      earlySingletonObjects是存放处于早期创建阶段的Bean的缓存。这个缓存的作用是解决循环依赖问题。当Bean创建过程中发生循环依赖时,A依赖于B,B又依赖于A,而A和B都处于创建中的状态,此时就会将A的早期对象保存到这个缓存中,以供后续的Bean创建过程中使用。当Bean创建完成后,会将Bean对象从早期对象缓存中移除。

    3. singletonFactories:
      singletonFactories是创建Bean实例的工厂对象缓存。当调用getEarlyBeanReference方法时,Spring会通过这个缓存从早期对象工厂中获取Bean对象。早期对象工厂是用于创建Bean对象的,它相当于Bean对象的代理。当目标Bean对象创建完成后,早期对象工厂会将组装好的Bean对象返回。

    总结:
    在Spring的Bean创建过程中,三级缓存分别存储了完全初始化成功的Bean对象、早期创建阶段的Bean对象以及创建Bean对象的工厂对象。三级缓存的使用可以解决循环依赖问题,确保Bean对象的完成创建和初始化。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部