SPI与API
背景
SPI: service provider interface 服务提供者-接口
API: application provider interface 应用提供者-接口
本质上就是话语权的问题,举个例子:
你是一个造轮子的,你的客户是汽车组装工厂,如果你的技术垄断市场,话语权更大,那造车工厂设计汽车轮轴时,就得按你的轮胎标准来;这就叫API,对外提供统一标准的服务;
假设你是靠这家工厂存活,那你的轮胎就得适应人家的标准;这时候就叫SPI,由应用方提供标准;
例如最经典的例子就是JDBC的驱动加载机制;
在服务启动时,jdbc加载所有类型的数据库驱动,那对于应用开发者来说,就不用考虑不同数据库的实现方式,任意切换;
考虑到框架层面横向扩展,有点类似插件一样,引入SPI能够很好的解决这个问题;
假设世界上只有一种数据库,那这种情况下,用spi并没有意义;
SPI:
- 概念上更依赖调用方。
- 组织上位于调用方所在的包中。
- 实现位于独立的包中。
- 常见的例子是:插件模式的插件。
API:
- 概念上更接近实现方。
- 组织上位于实现方所在的包中。
- 实现和接口在一个包中。
SPI整体机制图如下:

API 与 SPI的区别:

浙公网安备 33010602011771号