Java的SPI

2020-02-05  本文已影响0人  Haalo

介绍

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 的驱动实现。

mysql结构
文件中的内容
Driver文件.png
跳转后发现是对java.sql.Driver中实现
mysql中对Driver的实现
通过 SPI 机制把 java.sql.Driver 和 mysql 的驱动做了集成。这样 就达到了各个数据库厂商自己去实现数据库连接,jdk 本身不关心你怎么实现。
上一篇 下一篇

猜你喜欢

热点阅读