【Java】SPI机制
SPI全称:
服务供应商接口 Service Provider Interface
服务发现机制
入门概念视频来自于:
https://www.bilibili.com/video/BV1E44y1N7Nk
其它参考:
1 | https: //www.bilibili.com/video/BV1t44y127Uq |
提供一个接口规范:
1 2 3 4 5 6 7 8 9 10 11 | package cn.cloud9.spi; /** * @projectName: Java * @author: Cloud9 * @date: 2022年05月26日 10:39 * @version: 1.0 */ public interface ISpiService { void function(); } |
对应提供实现类A:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package cn.cloud9.spi; /** * @projectName: Java * @author: Cloud9 * @date: 2022年05月26日 10:40 * @version: 1.0 */ public class SpiServiceA implements ISpiService { @Override public void function() { System.out.println( "服务A实现!" ); } } |
实现类B:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package cn.cloud9.spi; /** * @projectName: Java * @author: Cloud9 * @date: 2022年05月26日 10:41 * @version: 1.0 */ public class SpiServiceB implements ISpiService { @Override public void function() { System.out.println( "服务B实现!" ); } } |
通常调用办法是多态,接口类型应用具体实现类
1、SPI规范要求实现类的资源描述放在META-INF/services目录下面
2、编写的文件名就是接口的名称
3、文件内容就是对应的实现类的类名
实际访问获取时,通过服务加载器根据接口的字节对象去翻查实现资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package cn.cloud9.spi; import java.util.ServiceLoader; /** * @projectName: Java * @author: Cloud9 * @date: 2022年05月26日 09:07 * @version: 1.0 */ public class SpiTest { public static void main(String[] args) { ServiceLoader<ISpiService> loader = ServiceLoader.load(ISpiService. class ); for (ISpiService spiService : loader) { spiService.function(); } } } |
执行结果:
1 2 3 4 | 服务A实现! 服务B实现! Process finished with exit code 0 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2021-05-26 【Java】系统找不到指定路径
2021-05-26 【Java】找不到此类异常
2021-05-26 【DataBase】排课设计思路
2020-05-26 【Node】下载安装(Linux)
2020-05-26 【Git】下载安装(Linux)
2020-05-26 【Maven】下载安装(Linux)
2020-05-26 【Linux】无法解决的迷惑异常集中贴