Java SPI介绍与示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l460133921/article/details/87551500

Java SPI 作用

SPI全称为Service Provider Interface,是JDK内置的一种服务提供发现机制,是一种动态替换发现机制,可以在不修改源代码或源框架的时候为接口提供新的实现。例如:有个接口想在运行时才发现具体的实现类,那么你只需要在程序运行前添加一个实现即可,并把新加的实现描述给JDK即可。

Java提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的SPI有JDBC、JCE、JNDI、JAXP和JBI等。

这些SPI的接口是由Java核心库来提供,而SPI的实现则是作为Java应用所依赖的jar包被包含进类路径(CLASSPATH)中。例如:JDBC的实现mysql就是通过maven被依赖进来。

实现一个SPI的步骤

  1. 创建接口的实现类
  2. 在CLASSPATH下新建META-INF文件夹
  3. 在META-INF下新建services文件夹
  4. 在services下新件一个以接口的全限定名命名的文本文件
  5. 在文本文件中添加接口实现类的全限定名,注意每个实现类单独占一行

使用SPI的方法

通过ServiceLoader.load()来获得某一个接口的所有实现类,获得后便可直接调用接口中的函数

SPI打包成JAR包的方法

请参考https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html

示例

工程是使用Gradle建立的Java工程,其工程结构如下:
在这里插入图片描述
源代码下载地址为:下载源代码

参考

  1. Java-SPI机制. https://www.jianshu.com/p/e4262536000d
  2. Introduction to the Service Provider Interfaces. https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html

猜你喜欢

转载自blog.csdn.net/l460133921/article/details/87551500