SPI的全称是Service Provider Interface,起初数提供给厂商做插件开发的。关于Java SPI的详细定义和说明,可查看官网说明。
Java SPI使用了策略模式,一个接口多种实现。其只定义接口,具体的实现并不在程序中直接确定,而是由程序之外的配置掌控,用于具体实现的装配。具体的步骤如下:
- 定义一个接口以及对应的方法。
- 编写该接口的一个实现类。
- 在META-INF/services/目录下,创建一个以接口全路径命名的文件。
- 在步骤三创建的文件中填写具体实现类的全路径类名,如果多个,则用分行符分隔。
- 在代码中通过java.util.ServiceLoader来加载具体的实现类。
示例代码目录结构如下:
com.jackson.dubbo.spi.PrintService代码如下:
package com.jackson.dubbo.spi;
public interface PrintService {
void printInfo();
}
com.jackson.dubbo.spi.PrintServiceImpl代码如下: