你好

SPI与API

背景

SPI: service provider interface 服务提供者-接口
API: application provider interface 应用提供者-接口

本质上就是话语权的问题,举个例子:
你是一个造轮子的,你的客户是汽车组装工厂,如果你的技术垄断市场,话语权更大,那造车工厂设计汽车轮轴时,就得按你的轮胎标准来;这就叫API,对外提供统一标准的服务;
假设你是靠这家工厂存活,那你的轮胎就得适应人家的标准;这时候就叫SPI,由应用方提供标准;

例如最经典的例子就是JDBC的驱动加载机制;
在服务启动时,jdbc加载所有类型的数据库驱动,那对于应用开发者来说,就不用考虑不同数据库的实现方式,任意切换;
考虑到框架层面横向扩展,有点类似插件一样,引入SPI能够很好的解决这个问题;
假设世界上只有一种数据库,那这种情况下,用spi并没有意义;
SPI:

  1. 概念上更依赖调用方。
  2. 组织上位于调用方所在的包中。
  3. 实现位于独立的包中。
  4. 常见的例子是:插件模式的插件。

API:

  1. 概念上更接近实现方。
  2. 组织上位于实现方所在的包中。
  3. 实现和接口在一个包中。

SPI整体机制图如下:
image

API 与 SPI的区别:
image

posted on 2021-06-24 00:01  Jackey_Lee  阅读(884)  评论(0)    收藏  举报

你好