Java SPI的简单使用

SPI的全称是Service Provider Interface,起初数提供给厂商做插件开发的。关于Java SPI的详细定义和说明,可查看官网说明。

Java SPI使用了策略模式,一个接口多种实现。其只定义接口,具体的实现并不在程序中直接确定,而是由程序之外的配置掌控,用于具体实现的装配。具体的步骤如下:

  1. 定义一个接口以及对应的方法。
  2. 编写该接口的一个实现类。
  3. 在META-INF/services/目录下,创建一个以接口全路径命名的文件。
  4. 在步骤三创建的文件中填写具体实现类的全路径类名,如果多个,则用分行符分隔。
  5. 在代码中通过java.util.ServiceLoader来加载具体的实现类。

示例代码目录结构如下:

Java SPI的简单使用_第1张图片

com.jackson.dubbo.spi.PrintService代码如下:

package com.jackson.dubbo.spi;

public interface PrintService {

    void printInfo();
}

com.jackson.dubbo.spi.PrintServiceImpl代码如下:

package com.jackson.dubbo.spi;

public class PrintServiceImpl implements PrintService {
    @Override
    public void printInfo() {
        System.out.println("Hello World SPI");
    }
}

resources/META-INF/services/com.jackson.dubbo.spi.PrintService文件配置如下:

com.jackson.dubbo.spi.PrintServiceImpl

测试代码如下:

@Test
    public void spiTest() {
        ServiceLoader serviceServiceLoader = ServiceLoader.load(PrintService.class);
        for (PrintService printService: serviceServiceLoader) {
            printService.printInfo();
        }
    }

测试结果如下:

Hello World SPI

 

你可能感兴趣的:(java,SPI,java,后端,SPI)