(7)什么是API&SPI

前言:

本篇为转载,原文地址,特此记录,方便自我学习。

API(Application Programming Interface)

概念:

在Java语言中,我们使用Java 提供的类,类的方法,数据结构来编写我们的应用程序,最后实现一些功能。这里的类,方法,数据结构 即是jdk提供的API 。API的意义其实就是这些提供给你完成某项功能的类,接口或者方法。

 API直接为你提供了功能,你使用API就能完成任务。

SPI(Application Programming Interface)

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

 SPI的实现方式是:提供实现的实现类打包成Jar文件,这个Jar文件里面必须有META-INF目录,其下又有services目录,其下有一个文本文件,文件名即为SPI接口的全名,文件的内容该jar包中提供的SPI接口的实现类名。

总结:  


         SPI是一种回调的思想,回调是指我们在使用api时,我们可以向api传入一个类或者方法,api在合适的时间调用类或者方法。SPI是在一些通用的标准中,为标准的实现产商提供的扩展点。标准在上层提供API,API内部使用了SPI,当API被客户使用时,会动态得从当前运行的classpath中寻找该SPI的实现,然后使用该SPI的实现来完成API的功能。
 

例子:


         举一个著名的例子:
         mysql的驱动包提供了java.sql.Driver这个SPI的实现,实现类是com.mysql.jdbc.Driver,在mysql-connector-java-5.1.6.jar中,我们可以看到有一个META-INF/services目录,目录下有一个文件名为java.sql.Driver的文件,其中的内容是com.mysql.jdbc.Driver。 
在运行DriverManager.getDriver并传入参数“com.mysql.jdbc.Driver”时,DriverManager会从mysql-connector-java-5.1.6.jar中找到com.mysql.jdbc.Driver并实例化返回一个com.mysql.jdbc.Driver的实例。
 

发布了54 篇原创文章 · 获赞 49 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tangthh123/article/details/104549705
SPI
今日推荐