java的spi 拓展机制

spi 拓展机制

        SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。

        主要用到ServiceLoader这个类,ServiceLoader通过读取resources/META-INF/services/com.xxx.xxx.xxxService文件下的xxxService的spi实现类,通过反射获取对应类实例,并调用对应方法。

SPI的简单实现

    下面我们来简单实现一个jdk的SPI的简单实现。

     1.   首先第一步,定义一组接口:

 public interface UploadCDN {
     void upload(String url);
 }
  1.   这个接口分别有两个实现:
public class QiyiCDN implements UploadCDN {  //上传爱奇艺cdn
    @Override
    public void upload(String url) {
        System.out.println("upload to qiyi cdn");
    }
}


public class ChinaNetCDN implements UploadCDN {//上传网宿cdn
    @Override
    public void upload(String url) {
        System.out.println("upload to chinaNet cdn");
    }
}

     3. 然后需要在resources目录下新建META-INF/services目录,并且在这个目录下新建一个与上述接口的全限定名一致的文件,在这个文件中写入接口的实现类的全限定名:

  1.     这时,通过serviceLoader加载实现类并调用:
public static void main(String[] args) {
         ServiceLoader<UploadCDN> uploadCDN = ServiceLoader.load(UploadCDN.class);
         for (UploadCDN u : uploadCDN) {
             System.out.println(u.getClass().getName());
             u.upload("filePath");
         }
     }

   输出如下:

总结

  1.  关于spi的详解到此就结束了,总结下spi能带来的好处:
  2. 不需要改动源码就可以实现扩展,解耦。
  3. 实现扩展对原来的代码几乎没有侵入性。
  4. 只需要添加配置就可以实现扩展,符合开闭原则。

场景:(国票)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值