一、什么是 SPI
Service Provider Interface 是一种 JDK 内置的服务发现机制。举例来说,假设你有一个接口,你可以在运行时动态给它一个实现类。
二、实现方法
- 服务由一个接口或抽象类表示。
- 服务提供者实现接口,子类化服务中定义的方法,并提供一个不带参数的构造方法。
- 在资源目录
META-INF/services
中放置提供者配置文件来标识服务提供者,每行一个。 ServiceLoader
以延迟方式查找和实例化提供者,也就是说根据需要进行。ServiceLoader
不是线程安全的。
为什么会是 META-INF/services
?
public final class ServiceLoader<S>
implements Iterable<S> {
private static final String PREFIX = "META-INF/services/";
// ...
}
参考文献
- 跟我学Dubbo系列之Java SPI机制简介
- Java API