java-spi规范

简介

SPI全称(service provider interface),是JDK内置的一种服务提供发现机制,目前市面上有很多框架都是用它来做服务的扩展发现,如JDBC、日志框架。
简单来说,它是一种动态替换发现的机制。举个简单的例子,如果我们定义了一个规范,需要第三方厂商去实现,那么对于我们应用方来说,只需要集成对应厂商的插件,就可以完成对应规范的实现机制,形成一种插拔式的扩展手段。

举例

市面上手机有很多种类,手机可以用来打电话、发短信、上网等等。苹果手机实现了发短信的功能、安卓手机也实现了发短信的功能。但是他们的本质是不同的两款手机系统。

代码实现

1、有一个手机基本接口,可以用来发短信。新建一个工程:mobile-phone,里面定义一个接口MobilePhone,并将此工程打成jar包。

public interface MobilePhone {

    /**
     * 手机发送短信
     * @return
     */
    public String sendMsg(String msg);
}

2、新建一个工程:iphone,定义一个Iphone类,实现接口MobilePhone,并将此工程打成jar包。

public class IPhone implements MobilePhone {

    @Override
    public String sendMsg(String s) {
        return "使用苹果手机发送了一条短信,内容为:"+s;
    }
}

在resources目录下新建META-INF/services,在其目录下新建一个文件,文件名为:com.ft.spi.MobilePhone,文件内容为:com.ft.spi.IPhone。
pox.xml文件引入mobile-phone工程的jar包。
将此工程打成jar包。

3、新建一个工程:android-phone,定义一个AndroidPhone类,实现接口MobilePhone,并将此工程打成jar包。

public class AndroidPhone implements MobilePhone {

    @Override
    public String sendMsg(String s) {
        return "使用安卓手机发送了一条短信,内容为:"+s;
    }
}

在resources目录下新建META-INF/services,在其目录下新建一个文件,文件名为:com.ft.spi.MobilePhone,文件内容为:com.ft.spi.AndroidPhone。
pox.xml文件引入mobile-phone工程的jar包。
将此工程打成jar包。

4、新建一个工程:spi-test,添加测试类,pom.xml文件引入iphone工程和android-phone工程的jar包。

public class App 
{
    public static void main( String[] args ){
        ServiceLoader<MobilePhone> serviceLoader=ServiceLoader.load(MobilePhone.class);
        for(MobilePhone mobilePhone:serviceLoader){
            System.out.println(mobilePhone.sendMsg("你好,spi!"));
        }
    }
}
//输入结果:
//使用苹果手机发送了一条短信,内容为:你好,spi!
//使用安卓手机发送了一条短信,内容为:你好,spi!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值