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加载实现类并调用

总结   

  • 只需要通过添加配置的方式进行扩展,解耦,对源代码没有任何的改动,符合开闭原则。
posted @ 2022-03-12 11:30  猫长寿  阅读(31)  评论(0)    收藏  举报