Java SPI 学习总结

Java SPI 使用

项目结构

image.png

项目通过一个接口和两个实现类演示 SPI 的使用。一个上传接口,两个实现类提供上传到磁盘和 OSS。

第一步:创建接口和实现类

上传接口:

public interface Upload {

    void upload(String url);
}

两个实现类:

public class UploadToDisk implements Upload {
    @Override
    public void upload(String url) {
        System.out.println("将 "+url+" 上传到了磁盘.");
    }
}
public class UploadToAliOss implements Upload {
    @Override
    public void upload(String url) {
        System.out.println("将 "+url+" 上传到了阿里OSS");
    }
}

第二步:设置 MEAT-INF

1、在 resources 目录下创建 META-INF ,在 META-INF 目录下创建 services 目录。

image.png

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

image.png

测试

测试类:

import com.elltor.spi.Upload;

import java.util.ServiceLoader;

public class Test {
    public static void main(String[] args) {
        ServiceLoader<Upload> uploads = ServiceLoader.load(Upload.class);

        System.out.println("--------------------");

        for (Upload u : uploads) {
            u.upload("/root/abc.png");
        }
    }
}

输出:

--------------------
将 /root/abc.png 上传到了阿里OSS
将 /root/abc.png 上传到了磁盘.

注意测试类总并没有两个具体的实现类的 import 导入,只引用了其接口 Upload,但最后两个实现类的实现方法被调用成功了。


(完)