SPI 简介
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,
通过一个简单例子来说明SPI是如何使用的。 首先通过一张图来看看,用SPI需要遵循哪些规范,因为spi毕竟是JDK的一种标准,目前Dubbo框架就基于SPI机制提供扩展功能。
SPI 实现
1、首先,创建spi接口类
我们首先创建spi接口类,如创建HelloInterface样例接口
package org.bird.spi;
/**
* @description java spi(Service Provider Interface)样例
* @author liangjf
*
*/
public interface HelloInterface {
/**
*
*/
public void sayHello();
}
2、其次,创建spi实现类
我们分别创建spi接口的ImageHello跟TextHello两个不同实现类
package org.bird.spi.impl;
import org.bird.spi.HelloInterface;
public class ImageHello implements HelloInterface {
public void sayHello() {
System.out.println("Image Hello.");
}
}
package org.bird.spi.impl;
import org.bird.spi.HelloInterface;
public class TextHello implements HelloInterface {
public void sayHello() {
System.out.println("Text Hello.");
}
}
3、再次,创建meta目录
我们创建META-INFO/services目录,并创建配置文件,文件名字为 接口/抽象类: 全名 文件内容: 接口/抽象类 实现类就像这样:org.bird.spi.HelloInterface
4、最后,创建测试程序
我们最后创建一个spi的测试程序,查看一下是否符合我们的预期结果。
package org.bird.spi;
import java.util.ServiceLoader;
public class SPIMain {
public static void main(String[] args) {
ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class);
for(HelloInterface in : loaders) {
in.sayHello();
}
}
}
运行结果如下:
Text Hello.
Image Hello.