java SPI 简单使用解析

java从1.6开始引入了ServiceLoader工具类,用来实现服务提供者框架(SPI)。这个框架主要有三个组成部分:服务接口、提供者注册、服务访问。其中,服务接口是提供服务者要实现的。

具体使用的方向,有一点就是实现功能的可插拔性,可以在软件运行的过程中,随时更换组件而不耗费过多的精力。

比如有这个么一个人,每天都要出门去买早点,平常都是跑着去。但有一天生病了,必须要走着去了,有了我们的ServiceLoader,那实现这个功能,就再简单不过了。

首先我们要实现组件之一,服务接口,GoWay。

public interface GoWay {
    String goWay();
}

然后,实现两个服务提供者,一个是Run,一个是Walk

public class Run implements GoWay {
    public String goWay() {
        return "I am Run";
    }
}

public class Walk implements GoWay {
    public String goWay() {
        return "I am walk";
    }
}

这时要想一下,怎么才能无缝切换走和跑两种买早点的方式呢。ServiceLoader提供了这种方式:在项目的文件管理中,新建以下路径 META-INF/services/,然后把服务接口的全称,也就是路径加名字,当作文件名,建立到该路径下,如图

内容就是想要使用的具体的实现的全名称。比如我们需要跑着去,那么配置如下:

我们使用main方法进行测试,代码如下:

public static void main(String[] args) {

    ServiceLoader<GoWay> serviceLoader = ServiceLoader.load(GoWay.class);

    serviceLoader.forEach(way->{
            System.out.println(way.goWay());
    });
}

结果如下:

这样,如果要改为走着去,可以很简单的修改配置中的实现类,就可以了。

配置中也可以配置多个方法,这个根据具体的业务进行合理的选择就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值