Java SPI
SPI,全称为 Service Provider Interface,主要用来被第三方的实现接口功能以及扩展的一种服务发现机制,它会自动加载ClassPath路径下的META-INF/services文件夹下所定义的类。
示例
- 提供一个接口
// 提供一个接口
public interface UploadCDN {
void upload();
}
- 定义两个实现类
public class HeCDN implements UploadCDN{
@Override
public void upload() {
System.out.println("他的CDN");
}
}
=====================================
public class MyCDN implements UploadCDN{
@Override
public void upload() {
System.out.println("我的CDN");
}
}
- 在META-INF/services创建文件名字是接口的全限定类名,内容是实现类的全限定类名,多个实现类用换行符分隔

- 通过serviceLoader加载实现类并调用

总结
- 只需要通过添加配置的方式进行扩展,解耦,对源代码没有任何的改动,符合开闭原则。

浙公网安备 33010602011771号