1.概念
SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架开发人员使用。
2.例子
// 读取文档接口
public interface ReadDoc {
List<String> readDoc(String keyword);
}
// 从文件读取
public class FileReadDoc implements ReadDoc {
@Override
public List<String> readDoc(String keyword) {
System.out.println("file read");
return Collections.emptyList();
}
}
// 从网络读取
public class NetworkReadDoc implements ReadDoc {
@Override
public List<String> readDoc(String keyword) {
System.out.println("network read");
return Collections.emptyList();
}
}
// 在resources下新建META-INF/services,以接口全限定名创建一个文件,如org.example.search.ReadDoc,内容为接口实现为全限定名,如org.example.search.FileReadDoc
// 测试
public class Test {
public static void main(String[] args) {
ServiceLoader<ReadDoc> loader = ServiceLoader.load(ReadDoc.class);
Iterator<ReadDoc> iterator = loader.iterator();
while (iterator.hasNext()) {
ReadDoc readDoc = iterator.next();
readDoc.readDoc("dragon");
}
}
}
// 运行结果:
file read