美文网首页
API vs SPI

API vs SPI

作者: helloWorld_1118 | 来源:发表于2018-05-17 15:11 被阅读0次

参考:https://blog.csdn.net/luxianping/article/details/51059690
      https://blog.csdn.net/e5945/article/details/24050127
Api 直接被应用开发人员使用,Spi 被框架扩张人员使用。

  • API(Application Programming Interface ):
        在java中,我们使用java提供的很多类、类的方法、数据结构来编写我们的应用程序,最终完成我们需求的程序功能,这里的类、方法、数据结构即是jdk提供的api。api的意义,其实就是这些提供给你完成某项功能的类、接口或者方法。

    API直接为你提供了功能,直接被应用开发人员使用

  • SPI(Service Provider Interface)

Spi 被框架扩张人员使用

    提供给你继承、扩展,完成自定义功能的类、接口或者方法。

  SPI是在一些通用的标准中,为标准的实现产商提供的扩展点。标准在上层提供API,API内部使用了SPI,当API被客户使用时,会动态得从当前运行的classpath中寻找该SPI的实现,然后使用该SPI的实现来完成API的功能。
SPI的实现方式是:提供实现的实现类打包成Jar文件,这个Jar文件里面必须有META-INF目录,其下又有services目录,其下有一个文本文件,文件名即为SPI接口的全名,文件的内容该jar包中提供的SPI接口的实现类名。

举一个著名的例子:

mysql的驱动包提供了java.sql.Driver这个SPI的实现,实现类是com.mysql.jdbc.Driver,在mysql-connector-java.jar中,我们可以看到有一个META-INF/services目录,目录下有一个文件名为java.sql.Driver的文件,其中的内容是com.mysql.jdbc.Driver。


image.png

在运行DriverManager.getDriver并传入参数“com.mysql.jdbc.Driver”时,DriverManager会从mysql-connector-java-5.1.6.jar中找到com.mysql.jdbc.Driver并实例化返回一个com.mysql.jdbc.Driver的实例。

相关文章

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

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

  • API vs SPI

    参考:https://blog.csdn.net/luxianping/article/details/51059...

  • [119]java spi探讨

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

  • java之spi详解

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

  • SPI 学习

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

  • SPI 与 API

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

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

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

  • 04-flink VS spark VS strom

    04-flink VS spark VS strom 流派对比 Flink API VS Spark API Fl...

  • SPI与API

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

  • API与SPI

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

网友评论

      本文标题:API vs SPI

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