https://zhuanlan.zhihu.com/p/28909673
Java SPI 使用
项目结构
项目通过一个接口和两个实现类演示 SPI 的使用。一个上传接口,两个实现类提供上传到磁盘和 OSS。
第一步:创建接口和实现类
上传接口:
1public interface Upload {
2
3 void upload(String url);
4}
两个实现类:
1public class UploadToDisk implements Upload {
2 @Override
3 public void upload(String url) {
4 System.out.println("将 "+url+" 上传到了磁盘.");
5 }
6}
1public class UploadToAliOss implements Upload {
2 @Override
3 public void upload(String url) {
4 System.out.println("将 "+url+" 上传到了阿里OSS");
5 }
6}
第二步:设置 MEAT-INF
1、在 resources 目录下创建 META-INF ,在 META-INF 目录下创建 services 目录。
2、在 services 目录下创建名为 Upload 全路径类名的文件,并在文件中写入两个实现类的全路径类名。
测试
测试类:
1import com.elltor.spi.Upload;
2
3import java.util.ServiceLoader;
4
5public class Test {
6 public static void main(String[] args) {
7 ServiceLoader<Upload> uploads = ServiceLoader.load(Upload.class);
8
9 System.out.println("--------------------");
10
11 for (Upload u : uploads) {
12 u.upload("/root/abc.png");
13 }
14 }
15}
输出:
1--------------------
2将 /root/abc.png 上传到了阿里OSS
3将 /root/abc.png 上传到了磁盘.
注意测试类总并没有两个具体的实现类的 import 导入,只引用了其接口 Upload,但最后两个实现类的实现方法被调用成功了。
(完)