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了