目录
SPI 简介
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,
而后,把新加的实现,描述给JDK就行(通过改一个文本文件即可)。
简单示例
通过一个简单例子来说明SPI是如何使用的。 首先通过一张图来看看,用SPI需要遵循哪些规范,因为spi毕竟是JDK的一种标准。 我们首先需要一个目录,META-INF\services 如下,最终的目录路径就像这样:
文件名字为: 接口/抽象类的全名
文件内容为: 接口/抽象类的实现类
具体定义的接口和实现类
接口:
package cn.face;
public interface IHello {
void say();
}
实现类:
package cn.impl;
import cn.face.IHello;
public class AHelloImpl implements IHello {
@Override
public void say() {
System.out.println("A.......");
}
}
package cn.impl;
import cn.face.IHello;
public class BHelloImpl implements IHello {
@Override
public void say() {
System.out.println("B.......");
}
}
最后,来看看,如果使用SPI机制,客户端测试代码:
package cn;
import cn.face.IHello;
import java.util.ServiceLoader;
public class Test {
public static void main(String[] args) {
ServiceLoader<IHello> load = ServiceLoader.load(IHello.class);
load.forEach(iHello -> {
iHello.say();
});
}
}
最后的输出:
A.......