spring三级缓存存什么

worktile 其他 29

回复

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

    Spring的三级缓存是用来存储bean对象的,在Spring框架中,bean对象的创建与销毁是比较耗费资源的操作,为了减少这些开销,Spring引入了三级缓存机制。

    三级缓存的存储内容如下:

    1. First Level Cache(一级缓存):一级缓存是针对单个BeanDefinition对象而言的,它存储的是创建好的bean对象实例。当我们通过ApplicationContext获取bean时,首先会从一级缓存中查找,如果找到,则直接返回,避免了重复创建对象的开销。

    2. Second Level Cache(二级缓存):二级缓存是对单个bean的缓存,它存储的是已经实例化的bean对象,与具体的BeanDefinition对象无关。当容器创建bean时,会将创建好的bean对象放入二级缓存中,当获取该bean时,首先会从二级缓存中查找,如果找到,则直接返回,避免了重复实例化的开销。

    3. Third Level Cache(三级缓存):三级缓存是对所有bean的缓存,它存储的是BeanFactory级别的缓存。当容器创建bean时,会将创建好的bean对象放入三级缓存中,当获取该bean时,首先会从三级缓存中查找,如果找到,则直接返回,避免了重复创建对象和实例化的开销。

    需要注意的是,一级缓存是在单例模式下使用的,而二级和三级缓存是在原型模式下使用的。因为单例模式下只需要创建一个实例,而原型模式下可能需要创建多个实例,所以采用了不同级别的缓存来减少创建对象和实例化的开销。

    总结起来,Spring的三级缓存机制可以提高系统性能,通过缓存已经创建好的bean对象,避免了重复创建和实例化的开销。

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

    Spring的三级缓存主要用于解决Bean的循环依赖问题。三级缓存分别为singletonFactory、earlySingletonObjects和singletonFactories。

    1. singletonFactory:存储还未完全初始化的Bean实例。当创建Bean实例后,但还未进行属性注入和初始化方法调用时,会将Bean实例存储在singletonFactory中。

    2. earlySingletonObjects:存储已经完成属性注入但还未完成初始化的Bean实例。当Bean实例的属性注入完成后,会将Bean实例从singletonFactory移动到earlySingletonObjects中。

    3. singletonFactories:存储已经完成初始化但还未完全初始化的Bean实例。当Bean实例的初始化方法调用完成后,会将Bean实例从earlySingletonObjects移动到singletonFactories中。

    这三级缓存的作用是为了解决Bean循环依赖的问题。当两个Bean相互依赖时,Spring通过缓存的方式来解决循环依赖的问题。

    具体的缓存过程如下:

    1. 当创建Bean A时,会首先检查singletonFactory中是否已经存在Bean A的实例。如果存在,则直接返回该实例,否则继续创建Bean A的实例。

    2. 创建Bean A的实例后,会将Bean A存储在singletonFactory中。

    3. 接着会进行Bean A的属性注入,如果发现依赖的Bean B已经存在于singletonFactory中,则直接从singletonFactory中获取Bean B的实例,否则继续创建Bean B的实例。

    4. 完成Bean B的实例创建后,会将Bean B存储在singletonFactory中。

    5. 等到Bean A的属性注入完成后,会将Bean A从singletonFactory移动到earlySingletonObjects中。

    6. 然后会调用Bean A的初始化方法,如果发现依赖的Bean B已经存在于earlySingletonObjects中,则直接从earlySingletonObjects中获取Bean B的实例,否则继续调用Bean B的初始化方法。

    7. 当Bean B的初始化方法调用完成后,会将Bean B从earlySingletonObjects移动到singletonFactories中。

    8. 最后会调用Bean A的初始化方法,完成Bean A的初始化。

    通过这种缓存的方式,Spring能够解决Bean循环依赖的问题,保证依赖关系的正确性。同时,三级缓存的使用也能够提高Bean的创建和初始化的效率,避免重复创建和初始化Bean实例。

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

    Spring框架中的Bean对象默认会被存储在三级缓存中。这三级缓存分别是singletonObjects缓存、earlySingletonObjects缓存和singletonFactories缓存。

    1. singletonObjects缓存:
      singletonObjects缓存用于存储完全初始化好的Bean对象。在Spring容器初始化时,如果一个Bean的scope属性为singleton,并且该Bean是非懒加载的,那么Spring会将该Bean初始化并存储在singletonObjects缓存中。当程序需要获取该Bean时,Spring会直接从该缓存中返回已经初始化好的对象。

    2. earlySingletonObjects缓存:
      earlySingletonObjects缓存用于存储正在创建中的Bean对象。在Spring容器初始化过程中,当创建一个Bean对象时,如果该Bean的scope属性为singleton,并且该Bean是非懒加载的,那么Spring会将正在创建中的Bean对象存储在earlySingletonObjects缓存中。这样,当其他Bean依赖此Bean时,如果需要进行循环依赖的处理,则可以通过这个缓存找到正在创建中的Bean对象,以避免循环依赖导致的死循环。

    3. singletonFactories缓存:
      singletonFactories缓存用于存储用于创建Bean对象的工厂对象(FactoryObject)。在Spring容器初始化时,当创建一个Bean对象时,如果该Bean的scope属性为singleton,并且该Bean是非懒加载的,那么Spring会将创建该Bean对象所需要的工厂对象存储在singletonFactories缓存中。这样,当程序需要获取该Bean时,Spring会通过调用工厂对象的getObject()方法来创建Bean对象,并且在创建完成后将其存储在singletonObjects缓存中。

    通过使用三级缓存,Spring框架能够实现Bean对象的单例管理,并且能够解决循环依赖的问题。在程序运行时,Spring能够快速地返回已经创建好的Bean对象,提高了系统的性能和效率。

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

400-800-1024

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

分享本页
返回顶部