乐趣区

关于程序员:API和SPI的简单介绍

引语

平时 API 倒是听得很多?SPI 又是啥. 别急咱们来先看看面向接口编程的调用关系,来理解一下,API 和 SPI 的类似和不同之处。

SPI 了解

先来一段官话的介绍:SPI 全称为 (Service Provider Interface),是 JDK 内置的一种服务提供发现机制. 咱们联合图片来了解一下。

简略的来说分为调用方,接口,服务方. 接口就是协定,契约,能够调用方定义,也能够由服务方定义,也就是接口是能够位于调用方的包或者服务方的包.
1. 接口的定义和实现都在服务方的时候,仅暴露出接口给调用方应用的时候,咱们称为 API;
2. 接口的定义在调用方的时候 (实现在服务方),咱们给它也取个名字 –SPI。

接口位于【调用方】所在的包中 ,对于相似这种状况下接口,咱们将其称为 SPI, SPI 的规定如下:

  • 概念上更依赖调用方。
  • 组织上位于调用方所在的包中。
  • 实现位于独立的包中。

常见的例子是:插件模式的插件。如:

  • 数据库驱动 Driver
  • 日志 Log
  • dubbo 扩大点开发

接口位于【实现方】所在的包中 ,对于相似这种状况下的接口,咱们将其称作为 API,API 的规定如下:

  • 概念上更靠近实现方。
  • 组织上位于实现方所在的包中。

SPI 的应用场景

SPI 在框架中其实有很多宽泛的利用,这里列举几个例子:1.Mysql 驱动的抉择 driverManager 依据配置来确定要应用的驱动;
2.dubbo 框架中的扩大机制(dubbo 官网链接)

退出移动版