SPI demo 小例子
一、SPI机制是什么?
spi全称为 (Service Provider Interface),是JDK内置的一种服务提供发现机制。SPI是一种动态替换发现的机制,一种解耦非常优秀的思想。
二、简单实现
1、目录层级
2、接口定义
public interface ITest {
void run();
}
3、接口实现
public class ITestOneImpl implements ITest {
@Override
public void run() {
System.out.println("ITestOneImpl:run");
}
}
public class ITestTweImpl implements ITest {
@Override
public void run() {
System.out.println("ITestTweImpl.run");
}
}
4、在resources文件夹下创建: META-INF/services 目录,且以接口全路径名文件,并写入需要调用的实现类(全路径)
5、编写测试类
public class Test {
public static void main(String[] args) {
ServiceLoader<ITest> serviceLoader = ServiceLoader.load(ITest.class);
Iterator<ITest> iterator = serviceLoader.iterator();
while (iterator.hasNext()) {
ITest car = iterator.next();
car.run();
}
}
}
结果输出:
ITestOneImpl:run
ITestTweImpl.run
这样就能发现调用的我们的接口实现类的run方法了
三、总结
不难发现,SPI机制理念是采用了文件配置来寻找接口的具体实现类,SPI常用于驱动处理,可以将调用者和服务者进行解耦,提高了代码的可扩展性。