引语
平时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官网链接)