【Java】SPI机制
SPI全称:
服务供应商接口 Service Provider Interface
服务发现机制
入门概念视频来自于:
https://www.bilibili.com/video/BV1E44y1N7Nk
其它参考:
https://www.bilibili.com/video/BV1t44y127Uq
提供一个接口规范:
package cn.cloud9.spi;
/**
* @projectName: Java
* @author: Cloud9
* @date: 2022年05月26日 10:39
* @version: 1.0
*/
public interface ISpiService {
void function();
}
对应提供实现类A:
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:
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、文件内容就是对应的实现类的类名

实际访问获取时,通过服务加载器根据接口的字节对象去翻查实现资源
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();
}
}
}
执行结果:
服务A实现! 服务B实现! Process finished with exit code 0

浙公网安备 33010602011771号