1. Java spi是什么
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。
2. 使用
- 定义spi接口
- 定义多态实现
- 按固定规范 即classpath:/META-INF/services目录下新建spi接口的全限定类名文件 文件内按行填写该spi接口用到的实现类
- ServiceLoader.load(spiInterface.class) 使用
工程目录结构
|- src/main/java
|- spi (定义spi接口的目录)
|- IEcho.java
|- impl (spi的多态)
|- EatEchoImpl.java
|- SpeakEchoImpl.java
|- App.java
|- src/main/resources
|- META-INF
|- services
|- spi.IEcho (定义的接口的全限定接口名称 父目录固定名)
工程代码文件
spi/IEcho.java
package spi;
public interface IEcho {
void echo();
}
spi/impl/EatEchoImpl.java
package spi.impl;
import spi.IEcho;
public class EatEchoImpl implements IEcho {
@Override
public void echo() {
System.out.println("eat echo !!");
}
}
spi/impl/SpeakEchoImpl.java
package spi.impl;
import spi.IEcho;
public class SpeakEchoImpl implements IEcho {
@Override
public void echo() {
System.out.println("speak echo !!");
}
}
App.java (启动类)
public class App {
public static void main(String[] args) {
for (IEcho echoService : ServiceLoader.load(IEcho.class)) {
echo