SPI 机制


一、什么是 SPI

Service Provider Interface 是一种 JDK 内置的服务发现机制。举例来说,假设你有一个接口,你可以在运行时动态给它一个实现类。

二、实现方法

spi


  1. 服务由一个接口或抽象类表示。
  2. 服务提供者实现接口,子类化服务中定义的方法,并提供一个不带参数的构造方法。
  3. 在资源目录 META-INF/services 中放置提供者配置文件来标识服务提供者,每行一个
  4. ServiceLoader 以延迟方式查找和实例化提供者,也就是说根据需要进行。
  5. ServiceLoader 不是线程安全的。

为什么会是 META-INF/services

public final class ServiceLoader<S>
    implements Iterable<S> {
    private static final String PREFIX = "META-INF/services/";

    // ...
}

参考文献

  1. 跟我学Dubbo系列之Java SPI机制简介
  2. Java API