Java SPI 学习总结
Java SPI 使用
项目结构
项目通过一个接口和两个实现类演示 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 目录。
2、在 services 目录下创建名为 Upload 全路径类名的文件,并在文件中写入两个实现类的全路径类名。
测试
测试类:
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,但最后两个实现类的实现方法被调用成功了。
(完)