引语

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

SPI理解

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

image-20201230212628160

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

接口位于【调用方】所在的包中,对于类似这种情况下接口,我们将其称为 SPI, SPI的规则如下:

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

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

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

接口位于【实现方】所在的包中,对于类似这种情况下的接口,我们将其称作为API,API的规则如下:

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

SPI的使用场景

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


njitzyd
58 声望7 粉丝

下一篇 »
JUC