Java|SPI 学习总结

#Java [字体 ··]

https://zhuanlan.zhihu.com/p/28909673

Java SPI 使用

项目结构

image.png

项目通过一个接口和两个实现类演示 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 目录。

image.png

2、在 services 目录下创建名为 Upload 全路径类名的文件,并在文件中写入两个实现类的全路径类名。

image.png

测试

测试类:

 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,但最后两个实现类的实现方法被调用成功了。


(完)


博客没有评论系统,可以通过 邮件 评论和交流。