spring三级缓存存的是什么

不及物动词 其他 62

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring三级缓存主要存储的是Bean对象。

    在Spring容器中,Bean对象的创建、依赖注入和销毁等操作都是由BeanFactory负责执行的。为了提高性能,Spring引入了三级缓存机制来优化Bean的创建过程。

    三级缓存机制由三个Map对象组成,分别是singletonObjects、earlySingletonObjects和singletonFactories。

    1. singletonObjects:该Map用于存储已经完成实例化并初始化的单例对象。当获取Bean时,如果该Bean存在于singletonObjects中,则直接返回该对象。

    2. earlySingletonObjects:该Map用于存储已经初始化但未完成依赖注入的Bean对象。当Bean的依赖关系不满足时,该Bean会被保存在earlySingletonObjects中等待下次依赖注入。

    3. singletonFactories:该Map用于存储Bean的创建工厂。当获取Bean时,如果该Bean存在于singletonFactories中,则通过创建工厂获取Bean的实例对象。

    通过三级缓存机制,Spring在实例化和初始化Bean的过程中,可以避免重复创建对象和解决循环依赖的问题,提高了应用的性能和效率。

    需要注意的是,三级缓存机制只适用于单例作用域的Bean,对于其他作用域的Bean(如原型作用域的Bean),Spring不会使用三级缓存来管理其生命周期。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring的三级缓存主要用于解决在创建Bean实例时的循环依赖问题,其中每一级缓存存储的内容有所不同。具体来说,Spring的三级缓存存储的内容如下:

    1. Singleton Objects(一级缓存):一级缓存存储的是已经完全创建好的、初始化好的单例Bean实例。当Spring在创建Bean时,如果检测到当前Bean正在创建过程中,那么会将其放入一级缓存中,以解决循环依赖问题。当依赖关系解析完成后,Spring会将Bean实例移除一级缓存,并对Bean进行后续的属性赋值和初始化操作。

    2. Early Reference Objects(二级缓存):二级缓存存储的是已经完成属性赋值但还未执行初始化方法的Bean实例。当Spring在创建Bean时,如果发现当前Bean实例已经存在于一级缓存中,那么会将其从一级缓存中移除,并放入二级缓存中。当所有Bean实例的属性都完成赋值后,Spring会遍历二级缓存中的Bean实例,并调用其初始化方法进行初始化。

    3. Singleton Factory Objects(三级缓存):三级缓存存储的是已经执行完初始化方法的Bean实例。当Spring在创建Bean时,如果发现当前Bean实例已经存在于二级缓存中,那么会将其从二级缓存中移除,并放入三级缓存中。在执行完所有Bean实例的初始化方法后,Spring会遍历三级缓存中的Bean实例,并将其添加到一级缓存中,作为最终创建完成的Bean实例返回。

    需要注意的是,三级缓存并不是永久性的存储,它只是在创建Bean实例的过程中的一个中间缓存环节。一旦Bean实例创建完成,并交给客户端使用后,三级缓存中的内容会被清空,下次再获取该Bean时还会重新创建。

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

    Spring的三级缓存是用于存储并管理Bean对象的缓存机制,用于提高Bean的创建和获取效率。三级缓存分别为singletonObjects、earlySingletonObjects和singletonFactories。

    1. singletonObjects:该缓存用于存储完全初始化并创建的Bean对象,以单例模式进行管理。当从缓存中获取Bean对象时,将直接返回该对象,而不需要重新创建。如果某个Bean的依赖属性发生变化,会触发该Bean的重新创建。

    2. earlySingletonObjects:该缓存用于存储正在创建过程中的Bean对象,也就是还未完成初始化的Bean。在Bean的创建过程中,当Bean的依赖关系发生循环引用时,Spring会先创建一个空的Bean对象,并将其存储在earlySingletonObjects缓存中。这样可以防止循环引用导致的死锁。当创建完成后,会将该Bean对象移动到singletonObjects缓存中。

    3. singletonFactories:该缓存用于存储Bean的创建工厂对象。在创建Bean对象时,如果存在循环依赖,会将创建Bean的工厂对象放入singletonFactories缓存中。当循环依赖解析完成后,会调用工厂对象的getObject()方法来获取完整的Bean对象,并将其放入singletonObjects缓存中。

    Spring的Bean对象缓存机制非常灵活,可以避免重复创建和循环引用的问题,提高了Bean的创建效率和应用性能。通过合理地使用三级缓存,可以优化Spring应用的性能。

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

400-800-1024

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

分享本页
返回顶部