详细对比Java SPI、Spring SPI 和 Dubbo SPI
SPI(Service Provider Interface)概述
- 定义:SPI是一种动态替换发现机制,用于实现接口与实现的解耦,提高框架的可扩展性。
- 核心思想:解耦和方便扩展。
Java SPI
- 约定规范:
- 扩展类文件放在
META-INF/services/目录下。 - 文件名是接口的全限定名,内容为实现类的全限定名。
- 扩展类文件放在
- 加载方式:
ServiceLoader<ISearch> serviceLoader = ServiceLoader.load(ISearch.class); - 优缺点:
- 优点:接口与实现分离。
- 缺点:一次性实例化所有扩展实现,资源浪费;不能按需加载。
Spring SPI
- 约定规范:
- 文件放在
META-INF/目录下,名为spring.factories。 - 文件内容为键值对,键为接口全限定名,值为实现类的全限定名,多个实现用逗号分隔。
- 文件放在
- Spring Boot 3.0 后:
- 可在
META-INF/spring/下的org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中配置。
- 可在
- 加载方式:
List<PropertySourceLoader> propertySourceLoaders = SpringFactoriesLoader.loadFactories(PropertySourceLoader.class, getClass().getClassLoader()); - 优缺点:
- 优点:不同接口扩展写在一个文件中,方便管理和扩展。
- 缺点:没有实现按需加载,需要自定义加载逻辑。
Dubbo SPI
- 约定规范:
- 接口必须加
@SPI注解。 - 配置文件可放在四个目录下,文件名为接口的全限定名。
- 内容为键值对,键为短名称,值为实现类的全限定名。
- 接口必须加
- 基础加载方式:
ExtensionLoader<IBusinessService> extensionLoader = ExtensionLoader.getExtensionLoader(IBusinessService.class); - 自适应扩展:
- 静态方式:使用
@Adaptive注解的类,如AdaptiveCompiler。 - 动态方式:运行时动态生成
Adaptive类,如Protocol$Adaptive.class。
- 静态方式:使用
- 自动激活:
- 使用
@Activate注解,根据入参动态选择实现类,如GenericFilter。
- 使用
总结
- SPI机制是提高软件模块化和可扩展性的关键技术。
- Java SPI、Spring SPI和Dubbo SPI各有特点,适用于不同的场景和需求。
- 了解和掌握SPI机制有助于更好地使用和扩展现有框架。
相关文章:
详细对比Java SPI、Spring SPI 和 Dubbo SPI
SPI(Service Provider Interface)概述 定义:SPI是一种动态替换发现机制,用于实现接口与实现的解耦,提高框架的可扩展性。核心思想:解耦和方便扩展。 Java SPI 约定规范: 扩展类文件放在META-…...
CPU的核心数和线程数
CPU的核心数和线程数 一、关系: 1、线程数可以模拟出不同的CPU核心数。 CPU的核心数指的是硬件上存在着几个核心,而线程数可以模拟出多个核心数的功能。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同…...
电脑游戏录屏,3款实用软件推荐给你
在电竞游戏热潮席卷全球的今天,电脑游戏录屏早已不再是简单的画面捕捉,它成为了记录电竞风采、打造专属游戏记忆的重要手段。通过游戏录屏,我们可以定格游戏中的精彩瞬间,重温那些令人热血沸腾的电竞时刻。那么,在进行…...
C#桌面应用开发:番茄定时器
C#桌面应用开发:番茄定时器 1、环境搭建和工程创建: 步骤一:安装visual studio2022 步骤二:新建工程 2、制作窗体部件 *踩过的坑: (1)找不到工具箱控件,现象如下:…...
PHP智慧门店微信小程序系统源码
🔍【引领未来零售新风尚】🔍 🚀升级启航,智慧零售新篇章🚀 告别传统门店的束缚,智慧门店v3微信小程序携带着前沿科技与人性化设计,正式启航!这个版本不仅是对过往功能的全面优化&a…...
SerDes介绍以及原语使用介绍(2)OSERDESE2原语仿真
文章目录 前言一、SDR模式1.1、设计代码1.2、testbench代码1.3、仿真分析 二、DDR模式下2.1、设计代码2.2、testbench代码2.3、仿真分析 三、OSERDES2级联3.1、设计代码3.2、testbench代码3.3、代码分析 前言 上文通过xilinx ug471手册对OSERDESE有了简单的了解,接…...
【稳定检索/投稿优惠】2024年教育、人文发展与艺术国际会议(EHDA 2024)
2024 International Conference on Education, Humanities Development and Arts 2024年教育、人文发展与艺术国际会议 【会议信息】 会议简称:EHDA 2024 大会时间:点击查看 截稿时间:点击查看 大会地点:中国北京 会议官网&#…...
Docker拉取失败,利用 Git将 Docker镜像重新打 Tag 推送到阿里云等其他公有云镜像仓库里
目录 一、开通阿里云容器镜像服务 二、Git配置 三、去DockerHub找镜像 四、编写images.txt文件 五、演示 六、其他注意事项 最近一段时间 Docker 镜像一直是 Pull 不下来的状态,想直连 DockerHub 是几乎不可能的。更糟糕的是,很多原本可靠的国内…...
【区分vue2和vue3下的element UI Breadcrumb 面包屑组件,分别详细介绍属性,事件,方法如何使用,并举例】
在 Vue 2 中,Element UI 提供了 el-breadcrumb 面包屑组件,而在 Vue 3 中,Element UI 的官方版本并没有直接更新以支持 Vue 3,但有一个类似的库叫做 Element Plus,它是为 Vue 3 设计的。 Vue 2 Element UI 在 Vue 2…...
gdb调试命令大全
基本命令 #gdb test test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。 start : 指令会执行程序至main() 主函数的起始位置,即在main() 函数的第一行语句处停止执行(该行代码尚未执行) cont…...
ESP32之arduino环境安装及点灯
目录 前言 前两天安装了VScode,奈何资源找的困难,于是咨询淘宝客服,他说arduino用的多,资源多.然后就安装了a…...
查看VUE中安装包依赖的版本号
查看VUE中安装包依赖的版本号 全部依赖包版本查看某个依赖的例:查看stompjs 应用命令npm ls stompjs 全部依赖包版本 使用npm命令 使用 npm ls 命令可以列出项目中所有已安装的依赖包及其版本。 使用 npm list --depth1 命令可以列出项目中直接依赖的包及其版本&a…...
博途通讯笔记1:1200与1200之间S7通讯
目录 一、添加子网连接二、创建PUT GET三、各个参数的意义 一、添加子网连接 二、创建PUT GET 三、各个参数的意义...
Kafka搭建(集群版)
Kafka单机版 部署前提 VMware环境 : 两台centos系统 Jdk包:jdk-8u202-linux-x64.tar.gz Kafka包:kafka_2.12-3.5.0.tgz Zookeeper包:apache-zookeeper-3.7.2-bin.tar.gz 百度网盘自取: 链接: https://pan.baidu.com/s/11EWuhBoSmH3musd_3Rgodw?pwde32t 提取码: e32t Kafka搭建…...
【康复学习--LeetCode每日一题】3115. 质数的最大距离
题目: 给你一个整数数组 nums。 返回两个(不一定不同的)质数在 nums 中 下标 的 最大距离。 示例 1: 输入: nums [4,2,9,5,3] 输出: 3 解释: nums[1]、nums[3] 和 nums[4] 是质数。因此答案是…...
【yolov8系列】ubuntu上yolov8的开启训练的简单记录
前言 yolov8的广泛使用,拉取yolov8源码工程,然后配置环境后直接运行,初步验证自己数据的检测效果,在数据集准备OK的情况下 需要信手拈来,以保证开发过程的高效进行。 本篇博客更注意为了方便自己使用时参考。顺便也记录…...
Scala学习笔记15: 文件和正则表达式
目录 第十五章 文件和正则表达式1- 读取行2- 从URL或者其它源读取3- 写入文本文件4- 序列化5- 正则表达式6- 正则表达式验证输入数据格式end 第十五章 文件和正则表达式 1- 读取行 在Scala中读取文件中的行可以通过不同的方法实现 ; 一种常见的方法是使用 scala.io.Source 对…...
外卖员面试现状
说明: 以下身份角色用符号代替 # 面试官 $ 求职者 # 看了您的简历你有两年半的送外卖经验,可以简单说一下您平时是怎么送外卖的吗? $ 我首先在平台接单然后到店里取餐,取到餐后到顾客留下的地址,再通知顾客取餐 # 你们也用电动…...
异步加载与动态加载
异步加载和动态加载在概念上有相似之处,但并不完全等同。 异步加载(Asynchronous Loading)通常指的是不阻塞后续代码执行或页面渲染的数据或资源加载方式。在Web开发中,异步加载常用于从服务器获取数据,而不需要用户等…...
MUNIK解读ISO26262--什么是DFA
我们在学习功能安全过程中,经常会听到很多安全分析方法,有我们熟知的FMEA(Failure Modes Effects Analysis)和FTA(Fault Tree Analysis)还有功能安全产品设计中几乎绕不开的FMEDA(Failure Modes Effects and Diagnostic Analysis),相比于它们…...
SQL Server 最大服务器内存设置:不是越大越好,官方推荐这样配 2026-05-24
SQL Server 数据库服务器内存配置选项https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/server-memory-server-configuration-options?viewsql-server-ver17一、问题背景 在 SQL Server 生产环境中,经常会看到数据库服务占用大量内存。很…...
DouYinBot 抖音无水印视频解析工具:3分钟快速搭建个人解析服务
DouYinBot 抖音无水印视频解析工具:3分钟快速搭建个人解析服务 【免费下载链接】DouYinBot 该项目仅自用,不提供抖音视频下载 项目地址: https://gitcode.com/gh_mirrors/do/DouYinBot 在抖音内容创作日益普及的今天,如何快速获取无水…...
抖音批量下载器终极指南:如何3分钟搞定无损音乐提取与高效素材管理
抖音批量下载器终极指南:如何3分钟搞定无损音乐提取与高效素材管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fa…...
TranslucentTB:Windows任务栏透明化终极解决方案与高级配置指南
TranslucentTB:Windows任务栏透明化终极解决方案与高级配置指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentT…...
OpenAI大神教你如何榨干Codex
闻乐 发自 凹非寺量子位 | 公众号 QbitAI新晋员工确实毫无保留。Jason Liu,13k星开源库Instructor的作者,刚被OpenAI招进Codex团队没多久,不仅在社交平台大方发API额度;还写了篇Codex-maxxing,把自己的Codex玩法全抖出…...
刚刚,马斯克第三代星舰首飞成功!
克雷西 发自 凹非寺量子位 | 公众号 QbitAI刚刚,马斯克的第十二次星舰试验,也是第三代星舰的首次飞行,顺利完成!当地时间昨天下午5点30分(北京时间今早6点30分),33台猛禽3发动机同时点火&#x…...
高斯混合期望传播算法:突破高阶MIMO检测性能瓶颈
1. 项目概述与核心挑战在无线通信系统的演进中,多输入多输出(MIMO)技术早已不是新鲜概念,它通过部署多根天线,在相同的频带内同时传输多个独立的数据流,从而成倍地提升了频谱效率和系统容量。然而ÿ…...
网盘直链解析工具完整指南:告别下载限速,实现高速下载
网盘直链解析工具完整指南:告别下载限速,实现高速下载 【免费下载链接】netdisk-fast-download 聚合多种主流网盘的直链解析下载服务, 一键解析下载,已支持夸克网盘/uc网盘/蓝奏云/蓝奏优享/小飞机盘/123云盘等. 支持文件夹分享解析. 体验地址…...
【紧急预警】2024Q3起医保DRG/DIP结算将强制接入AI行为审计日志!医疗机构AI Agent日志治理4级合规改造倒计时
更多请点击: https://kaifayun.com 第一章:AI Agent医疗行业应用 AI Agent正以前所未有的深度融入医疗健康全链条,从辅助诊断、个性化治疗规划到慢病管理与药物研发,展现出强推理、多工具协同与持续学习的核心能力。不同于传统静…...
3分钟快速掌握:FakeLocation虚拟定位完全指南,无需系统权限实现应用级位置模拟
3分钟快速掌握:FakeLocation虚拟定位完全指南,无需系统权限实现应用级位置模拟 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否曾想过在游戏中签到获…...
