美文网首页
SPI 与 API

SPI 与 API

作者: faris_shi | 来源:发表于2016-05-30 16:59 被阅读3411次

背景

Java 中区分 API 和 SPI,通俗的讲:API 和 SPI 都是相对的概念,他们的差别只在语义上,API 直接被应用开发人员使用,SPI 被框架扩展人员使用

理解

API Application Programming Interface

大多数情况下,都是实现方来制定接口并完成对接口的不同实现,调用方仅仅依赖却无权选择不同实现。

SPI Service Provider Interface

而如果是调用方来制定接口,实现方来针对接口来实现不同的实现。调用方来选择自己需要的实现方

More specifically, for Java libraries, what makes them an API and/or SPI?

the API is the description of classes/interfaces/methods/... that you call and use to achieve a goal

the SPI is the description of classes/interfaces/methods/... that you extend and implement to achieve a goal

Put differently, the API tells you what a specific class/method does for you and the SPI tells you what you must do to conform.

从面向接口编程说起

接口调用.jpg

当我们选择在调用方实现方 中间引入 接口。上图没有给出“接口”应该位于哪个“包”中,从纯粹的可能性上考虑,我们有三种选择:

  1. 接口位于实现方所在的包中
  2. 接口位于调用方所在的包中
  3. 接口位于独立的包中

接口位于调用方所在的包中

对于类似这种情况下接口,我们将其称为 SPI, SPI的规则如下:

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

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

  1. 数据库驱动 Driver
  2. 日志 Log
  3. dubbo扩展点开发

接口位于实现方所在的包中

对于类似这种情况下的接口,我们将其称作为APIAPI的规则如下:

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

接口位于独立的包中

如果一个“接口”在一个上下文是API,在另一个上下文是SPI,那么你就可以这么组织

需要注意的事项

SPIAPI 也不一定是接口,我这里都是指狭义的具体的接口。

另外一张图

SPI和API区别.png

相关文章

  • java之spi详解

    作者:zen API与SPI API (Application Programming Interface)是我们...

  • SPI与API

    SPI与我们熟知的API名字上有点相似,SPI被称为服务提供接口,API称为应用程序接口,两者的区别大致可以这样来...

  • API与SPI

    在看dubbo源码的时候,发现里面大量的使用了SPI机制,而对于很多的人来说,SPI还是一个相对陌生的概念(我也是...

  • SPI 与 API

    背景 Java 中区分 API 和 SPI,通俗的讲:API 和 SPI 都是相对的概念,他们的差别只在语义上,A...

  • 三:dubbo中的设计原则

    1:一些设计上的基本常识 (1)API与SPI分离 API:Application Programming Int...

  • [119]java spi探讨

    什么是spi spi全名为service provider interface,它是一种api,该api允许被第三...

  • SPI 学习

    1. 什么是 SPI,和 API 有什么区别? SPI (Service Provider Interface),...

  • 浅谈Java SPI原理与其在JDBC、Flink中的应用

    API vs SPI API(Application Programming Interface)的概念对我们来说...

  • 概念3:SPI与API

    SPI基本概念示例 今天调研内存计算时看到了SPI这个术语,做个记录。 什么是SPI? SPI ,全称为 Serv...

  • Java基础系列-SPI你认识吗

    原创文章,转载请标注出处:《Java基础系列-SPI你认识吗》 一、SPI是什么 SPI是相对API而言的。 AP...

网友评论

      本文标题:SPI 与 API

      本文链接:https://www.haomeiwen.com/subject/tpccdttx.html