【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

  

 

 

posted @   emdzz  阅读(42)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 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】无法解决的迷惑异常集中贴
点击右上角即可分享
微信分享提示