SPI全称为Service Provider Interface. 是JDK内置的一种服务提供发现功能,一种动态替换发现的机制。
项目例子
- 接口类是HelloInterface ,有两个实现类,分别是是FooHello和BarHello.
- 在META-INF目录下建立扩展文件,已接口HelloInterface全路径命名
public interface HelloInterface {
void sayHello();
}
public class BarHello implements HelloInterface {
@Override
public void sayHello() {
System.out.println("bar");
}
}
public class FooHello implements HelloInterface {
@Override
public void sayHello() {
System.out.println("foo");
}
}
public class SPIMain {
public static void main(String[] args) {
ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class);
if (loaders != null) {
loaders.forEach(it -> {
it.sayHello();
});
}
}
}
META-INF.services/me.warriorg.spi.HelloInterface
me.warriorg.spi.impl.BarHello
me.warriorg.spi.impl.FooHello