目录
1、简述
SPI 全称 Service Provider Interface,起初是提供给厂商做插件开发的。Java SPI 使用了策略模式,一个接口多种实现,它将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展性的机制。但一次性会实例化扩展点的所有实现,会存在耗时、浪费资源等情况。
2、使用步骤
2.1 定义一个接口及对应的实现方法
# 接口定义
public interface SPIService {
void printInfo();
}
2.2 编写该接口的一个实现类
public class SPIServiceImpl implements SPIService{
@Override
public void printInfo() {
System.out.println("Hello Java SPI!");
}
}
2.3 在META-INF/services/目录下,创建接口文件
接口文件名为接口的全路径名称,如 com.test.spi.SPIService
2.4 编写文件内容
文件内容为具体实现类的全路径名称,如果有多个,则用分号符分隔,如 com.test.spi.SPIServiceImpl
2.5 通过ServiceLoader来加载具体的实现类
import java.util.ServiceLoader;
public class SPIMain {
public static void main(String[] args) {
ServiceLoader<SPIService> spiServices = ServiceLoader.load(SPIService.class);
spiServices.forEach(SPIService::printInfo);
}
}
3、项目结构
4、Dubbo SPI
详情参照 Dubbo SPI