spi 的全称是 service provider interface, 它是jdk内置的一种服务提供发现机制。
常用于框架设计中:运行时动态为接口提供实现。
实现案例: servlet3.0以后,可以不用web.xml来作项目的入口,而是用spi机制。
spi的使用:
- 在类路径下添加目录:META-INF/services
- 在添加的目录中以要实现的接口的全类名为文件名添加一个文本文件
- 在文本文件中添加接口的实现类的全类名(一个实现类占一行)
示例代码:
-
接口与实现类
-
META-INF/services 目录与内容
-
代码
public static void main(String[] args) {
ServiceLoader<Hello> hellos = ServiceLoader.load(Hello.class);
Iterator<Hello> iterator = hellos.iterator();
while (iterator.hasNext()){
iterator.next().hello();
}
}