概述
对于Java SPI会分为两篇文章来介绍,第一篇文章会简单介绍如何实现一个Java SPI Demo学习,第二篇文章会从JDK源码角度来分析Java SPI实现原理
什么是Java SPI
SPI的全称是Service Provider Interface,是JDK内置的一种服务发现机制。通过SPI我们可以动态加载我们定义的服务实现类。
Demo展示
定义一个接口
package com.spi;
public interface ISpi {
void say();
}
编写两个实现类
package com.spi;
public class FirstSpiImpl implements ISpi {
@Override
public void say() {
System.out.println("我是第一个SPI实现类");
}
}
package com.spi;
public class SecondSpiImpl implements ISpi {
@Override
public void say() {
System.out.println("我是第二个SPI实现类");
}
}
编写配置文件
在src根目录创建文件夹META-INF/services,在创建的文件夹下面创建一个文件,命名为SPI接口的全路径名,并写上需要动态加载的实现类的全路径名:
com.spi.FirstSpiImpl
com.spi.SecondSpiImpl
编写运行程序
package com.spi;
import java.util.ServiceLoader;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) {
ServiceLoader<ISpi> serviceLoader = ServiceLoader.load(ISpi.class);
for (ISpi service : serviceLoader) {
service.say();
}
}
}
输出内容为
我是第一个SPI实现类
我是第二个SPI实现类
读者可以随意增删配置内容,查看具体输出。
文件结构图
关于SPI入门学习只需要看到这就可以来,下一篇文章会从JDK源码角度来详细分析SPI原理,敬请关注~~