spring三级缓存怎么联动的

不及物动词 其他 16

回复

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

    Spring的三级缓存是指在Spring框架中使用的三个不同的缓存层级:方法缓存、类级别缓存和全局缓存。这些缓存层级之间是如何联动的呢?让我们来看一下:

    1. 方法缓存与类级别缓存的联动:
      方法缓存是在类级别缓存的基础上实现的,用于缓存某个类中的具体方法。当一个方法被调用时,先检查方法缓存是否存在缓存结果,如果存在则直接返回;如果不存在,则继续检查类级别缓存是否存在该类的缓存结果,如果存在则将该结果存入方法缓存,并返回结果;如果类级别缓存中也不存在,则执行具体的方法逻辑,并将结果存入方法缓存和类级别缓存。

    2. 类级别缓存与全局缓存的联动:
      类级别缓存是在全局缓存的基础上实现的,用于缓存整个类的对象。当一个类的对象被创建时,首先检查全局缓存是否存在该类的缓存结果,如果存在则直接返回;如果不存在,则执行类的初始化逻辑,并将结果存入全局缓存。

    这样,通过方法缓存、类级别缓存和全局缓存的联动,可以实现对不同层级的缓存结果的管理和利用。当一个方法被多次调用时,可以直接从方法缓存中获取结果,提高了方法的执行效率;而当多个类的对象需要被创建时,可以直接从类级别缓存中获取已经创建好的对象,减少了对象的创建时间和资源消耗;而全局缓存则可以作为整个应用程序的缓存结果的存储和管理。

    综上所述,Spring的三级缓存通过联动的方式实现了对方法、类和全局层级的缓存管理,提高了系统的性能和效率。

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

    Spring的三级缓存机制是用于支持Bean的创建和管理的。它由三层组成:单例对象工厂缓存、早期对象工厂缓存和原始对象缓存。这三层缓存之间是有联系的。

    1. 单例对象工厂缓存:在Spring容器启动时,会将所有的单例Bean对象以及它们的实例化工厂缓存到这一层。当获取一个单例Bean对象时,首先会检查该缓存是否存在该Bean对象,如果存在则直接返回,如果不存在则进入下一层缓存。

    2. 早期对象工厂缓存:在创建单例Bean时,Spring会首先通过实例化工厂创建一个早期对象,并将该早期对象缓存到这一层。早期对象还没有完全初始化,只进行了一部分的属性注入和依赖解析。如果从单例对象工厂缓存中没有找到Bean对象,就会检查这一层缓存。如果找到早期对象,则继续进行初始化;如果没有找到早期对象,则进入下一层缓存。

    3. 原始对象缓存:当早期对象被创建后,Spring会执行一系列的初始化逻辑,完成依赖注入、AOP代理等操作,最终得到完全初始化的Bean对象。完全初始化的Bean对象会被缓存到这一层。当再次获取该Bean对象时,会直接从原始对象缓存中返回对象。

    三级缓存的联动过程如下:

    1. 当获取一个Bean对象时,首先检查单例对象工厂缓存,如果存在该Bean对象,则直接返回;
    2. 如果单例对象工厂缓存中没有找到该Bean对象,则检查早期对象工厂缓存,如果存在早期对象,则继续进行初始化;
    3. 如果早期对象工厂缓存中也没有找到早期对象,则执行Bean的创建逻辑,创建一个完全初始化的Bean对象,并将其缓存到原始对象缓存;
    4. 当再次获取该Bean对象时,直接从原始对象缓存中返回。

    通过三级缓存的联动,Spring能够在创建和获取Bean对象时进行缓存,避免了重复创建和初始化操作,提高了性能和效率。同时,缓存的三层结构能够保证Bean对象的依赖关系的正确解析和注入。

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

    Spring框架提供了三级缓存机制来优化Bean的创建和管理过程,三级缓存包括singletonObjects、earlySingletonObjects和singletonFactories。这三个缓存通过一系列的操作形成一个联动机制。

    下面我将从方法和操作流程两个方面来讲解Spring三级缓存的联动。

    1. 方法:
      Spring的三级缓存是通过三个方法来实现的,分别是getSingleton、earlySingletonReference和addSingletonFactory。

      • getSingleton方法用于从singletonObjects缓存中获取Bean实例。如果在singletonObjects缓存中找不到对应的实例,Spring会尝试从singletonFactories缓存中获取一个ObjectFactory实例,并通过ObjectFactory创建Bean实例,并将其放入earlySingletonObjects缓存中。

      • earlySingletonReference方法用于从earlySingletonObjects缓存或singletonFactories缓存中获取Bean实例。如果在earlySingletonObjects缓存中找到了Bean实例,则直接返回;否则,从singletonFactories缓存中获取ObjectFactory实例,并通过ObjectFactory创建Bean实例,并将其放入earlySingletonObjects缓存中。

      • addSingletonFactory方法用于向singletonFactories缓存中添加ObjectFactory实例,当getSingleton方法和earlySingletonReference方法无法从singletonObjects缓存和earlySingletonObjects缓存中获取Bean实例时,会调用addSingletonFactory方法来添加一个ObjectFactory实例到singletonFactories缓存中。

    2. 操作流程:
      Spring的三级缓存的联动操作流程如下:

      1)首先,当我们向Spring容器中注册一个Bean时,Spring会先从singletonObjects缓存中查找该Bean的实例,如果存在则直接返回。

      2)如果singletonObjects缓存中不存在该Bean的实例,则会调用addSingletonFactory方法,将该Bean的ObjectFactory实例添加到singletonFactories缓存中。

      3)当需要获取该Bean实例时,会调用getSingleton方法来从singletonObjects缓存中获取,如果存在,则直接返回。

      4)如果getSingleton方法无法从singletonObjects缓存中获取到Bean实例,则会调用earlySingletonReference方法来从earlySingletonObjects缓存或singletonFactories缓存中获取。

      5)如果在earlySingletonObjects缓存中找到了Bean实例,则直接返回。

      6)如果在earlySingletonObjects缓存中没有找到Bean实例,则会从singletonFactories缓存中找到对应的ObjectFactory实例,并通过ObjectFactory创建Bean实例,并将其放入earlySingletonObjects缓存中。

      7)最后,将创建好的Bean实例放入singletonObjects缓存中,并从earlySingletonObjects缓存中删除。

    通过以上的方法和操作流程,Spring的三级缓存机制实现了一个联动的机制,保证了Bean的创建和管理过程的高效性和一致性。

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

400-800-1024

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

分享本页
返回顶部