Java的SPI

介绍

SPI:service provider interface
Java SPI 是 JDK 内置的一种服务提供发现机制。它是Java中一种动态替换发现的机制。比如说JDBC,我们在连接数据库的时候需要用到java.sql.Driver 这个接口,但是Driver并没有实现,而是提供了一套标准的 api 接口。而是在mysql包中的com.mysql.cj.jdbc.Driver实现了Driver。
别人定义的接口我去实现。

SPI

如何实现SPI

  1. 需要在 classpath 下创建一个目录,该目录命名必须是:META-INF/services。
  2. 在该目录下创建一个 properties 文件,该文件需要满足以下几个条件:
    • 文件名必须是扩展的接口的全路径名称
    • 文件内部描述的是该扩展接口的所有实现类
    • 文件的编码格式是 UTF-8
    • 通过 java.util.ServiceLoader 的加载机制来发现

SPI 的实际应用

以JDBC为例:
META-INF/service路径下的文件里面写的就是 mysql 的驱动实现。


文件中的内容
Driver文件.png

跳转后发现是对java.sql.Driver中实现
mysql中对Driver的实现

通过 SPI 机制把 java.sql.Driver 和 mysql 的驱动做了集成。这样 就达到了各个数据库厂商自己去实现数据库连接,jdk 本身不关心你怎么实现。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SPI是什么 SPI的英文名称是Service Provider Interface,是Java 内置的服务发现机...
    GallenZhang阅读 357评论 0 0
  • 1.JAVA 的SPI机制 SPI全称(service provider interface),是JDK内置的一种...
    Mrsunup阅读 316评论 1 1
  • 1.SPI简述 SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制...
    zhglance阅读 484评论 0 0
  • SPI的概念 英文全称为Service Provider Interface 是JDK内置的一种服务提供发现机制 ...
    孙先森不可不弘毅阅读 262评论 0 0
  • 最近在阅读Dubbo框架源代码时,经常看到@Spi,查了一下SPI: Service Provider Inter...
    kobe0429阅读 337评论 0 0