一、介绍

1 说明

Java中使用SPI功能,需要先提供标准服务接口,然后再提供相关接口实现和调用者。这样就可以通 过SPI机制中约定好的信息进行查询相应的接口实现。

2 约定

1、当服务提供者提供了接口的一种具体实现后,在META-INF/services目录下创建一个以“接口全 限定名”为命名的文件,内容为实现类的全限定名;

2、接口实现类所在的jar包放在主程序的classpath中;

3、主程序通过java.util.ServiceLoader动态装载实现模块,它通过扫描META-INF/services目录下 的配置文件找到实现类的全限定名,把类加载到JVM;

4、SPI的实现类必须携带一个无参构造方法;

二、demo

1 建接口module 写接口类

image.png

2 module 实现类

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.flame</groupId>
  4. <artifactId>java_spi_demo_api</artifactId>
  5. <version>1.0-SNAPSHOT</version>
  6. </dependency>
  7. </dependencies>

image.png

3 SPI 配置文件

image.png

4 测试module

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.flame</groupId>
  4. <artifactId>java_spi_demo_api</artifactId>
  5. <version>1.0-SNAPSHOT</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.flame</groupId>
  9. <artifactId>java_spi_demo_impl</artifactId>
  10. <version>1.0-SNAPSHOT</version>
  11. </dependency>
  12. </dependencies>

image.png
image.png