墨风如雪博客

  • 源码小店
  • 传家宝VPS
让AI使用变得如此简单
  1. 首页
  2. java
  3. spring
  4. 正文

Spring 三级缓存能解决什么问题和原理(超详细)

2023年 5月 2日 399点热度 0人点赞 0条评论
好的,下面再详细介绍一下 Java Spring 的三级缓存 BeanFactory、SingletonRegistry、FactoryBeanRegistry。

  1. BeanFactory

BeanFactory 是 Spring IoC 容器最基本的接口,定义了 IoC 容器的基本功能,负责对象的实例化、配置与装配。BeanFactory 中定义了 getBean() 方法用于获取 Bean 实例。在 Spring 应用中,BeanFactory 只负责 Bean 的管理和维护,不参与具体的业务逻辑。BeanFactory 的方法比较简单,代码如下:

public interface BeanFactory {
    Object getBean(String name) throws BeansException;
    <T> T getBean(String name,Class<T> requiredType) throws BeansException;
    <T> T getBean(Class<T> requiredType) throws BeansException;
    Object getBean(String name,Object... args) throws BeansException;
    boolean containsBean(String name);
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;
    String[] getAliases(String name);
}
  1. SingletonRegistry

SingletonRegistry 是 Spring 中的单例缓存,负责管理和维护所有的单例 Bean 实例。在 Spring 应用中,单例 Bean 实例是一种使用比较广泛的 Bean 实例,对于被 SingletonRegistry 缓存的单例 Bean 实例,应用启动后只会创建一次,并在以后的调用中直接返回缓存中的实例,而不会再次创建。SingletonRegistry 中定义了 registerSingleton() 方法用于注册单例 Bean 实例,代码如下:

public interface SingletonRegistry {
    void registerSingleton(String beanName, Object singletonObject);
    Object getSingleton(String beanName);
    boolean containsSingleton(String beanName);
    String[] getSingletonNames();
    int getSingletonCount(); }
  1. FactoryBeanRegistry

FactoryBeanRegistry 是 Spring 中的工厂 Bean 缓存,用于管理和维护所有的 FactoryBean 实例。在 Spring 容器中,可以通过实现 FactoryBean 接口来创建 Bean 实例,而被 FactoryBeanRegistry 缓存的工厂 Bean 实例是一个比较特殊的实例类型,它的 getObject() 方法返回的是 FactoryBean 创建的目标 Bean 实例。FactoryBeanRegistry 中定义了 registerFactory() 方法用于注册工厂 Bean 实例,代码如下:

public interface FactoryBeanRegistry {
    void registerFactory(String factoryName, FactoryBean<?> factory);
    Object getFactory(String beanName);
    boolean containsFactory(String beanName);
    String[] getFactoryNames();
    int getFactoryCount(); }

spring设计三级缓存的意义

Java Spring 三级缓存主要是为了提高 Bean 实例的加载性能。我们知道,在 Spring 容器启动时,会根据 Bean 定义信息创建 Bean 实例,这个过程可能会比较耗时,而且如果有很多 Bean 实例,可能会导致启动速度变得异常缓慢。

使用三级缓存可以将这个问题得到有效地解决,它可以将 Bean 实例缓存在内存中,避免了重复的实例化、配置和初始化过程,以达到提高 Bean 实例加载速度的目的。

具体来说,BeanFactory 缓存是为了避免解析和加载 BeanDefinition 计算时间过长,SingletonRegistry 缓存是为了避免重复实例化单例 Bean 的过程,而 FactoryBeanRegistry 缓存是避免频繁的调用 FactoryBean 的 getObject() 方法和实例化目标 Bean 的过程。

Java Spring 的三级缓存可以有效地提高 Bean 实例的加载性能,大大缩短了容器启动时间,提升了整个应用程序的性能表现。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: java spring 三级缓存 意义
最后更新:2023年 5月 2日

墨风如雪

一个热爱生活,热爱分享的程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

墨风如雪

一个热爱生活,热爱分享的程序员

最新 热点 随机
最新 热点 随机
Kimi K2.5开源:自带百人众包团队,月之暗面重新定义生产力 告别修图软件的图层噩梦,腾讯混元3.0让AI学会了“思考” 参数仅100亿却硬刚千亿巨头:阶跃星辰Step3-VL-10B凭什么封神? 腾讯CodeBuddy 2.0:从“副驾驶”到“全栈合伙人”的进化 97毫秒极致响应!Qwen3-TTS开源,重新定义语音生成的“速度与激情” 2026开年王炸:文心5.0带着2.4万亿参数和原生全模态来了
仅需1GB内存!腾讯混元MT1.5开源,让手机翻译彻底告别云端依赖十天谈下二十亿美金:Meta豪掷千金买下的中国AI天才,到底凭什么?智谱ZCode上手:把Claude和Gemini装进桌面,编程还能这么玩?告别延迟!通义开源Fun-Audio-Chat,这才是我们要的语音AI这可能是最懂人话的AI:阿里MAI-UI让手机自动驾驶成真DeepSeek新年炸场:给失控的AI模型装上数学红绿灯
SpringBoot扩展点之ApplicationContextInitializer Telegram不再安全?从警博会看中国对加密通讯的AI化监控与你的隐私防线 国产AI震撼登场:Gaga,不只是一款视频生成器,它还是你的AI演员! 每日算法题:Z字形变换算法实现 不一样的视角 解析NoSQL数据库 Apache CouchDB 如何在NameSilo上购买域名:从注册到支付宝和微信支付一步步教你
标签聚合
AI 大模型 spring java deepseek 设计模式 教程 算法

COPYRIGHT © 2023 墨风如雪博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang