spi是java提供的一种服务发现的机制,在jdbc和double等很多的地方都使用到了,下面就来写一个demo来加深一下理解
先新建一个接口
public interface SPIService {
void invoke();
}
再来两个实现类
public class SPIServiceImpl implements SPIService {
@Override
public void invoke() {
System.out.println("impl");
}
}
public class SPIServiceImpl2 implements SPIService {
@Override
public void invoke() {
System.out.println("impl2");
}
}
然后需要在resource/META-INF/services下新建一个文件
文件名为接口的全限定名,内容为实现类的全限定名
例如我的就是com.example.qikangyuan.spi.SPIService
然后内容就是实现类的全限定名
com.example.qikangyuan.spi.SPIServiceImpl
com.example.qikangyuan.spi.SPIServiceImpl2
然后就可以写一个测试类了
public class SPITest {
public static void main(String[] args) {
ServiceLoader<SPIService> load = ServiceLoader.load(SPIService.class);
Iterator<SPIService> iterator = load.iterator();
while (iterator.hasNext()){
SPIService next = iterator.next();
next.invoke();
}
}
}
运行结果
impl
impl2
以上就是一个很简单的spi的demo了