Java SPI机制

SPI(Service Provider Interface)是Java自带的服务发现机制,通过读取写入实现类的全限定名的配置文件来加载对应类,可以在运行的时候动态为接口替换实现类

示例

首先声明一个接口

package com.uzck.spi;

public interface GreetService {
    String sayHi(String msg);
}

接下来定义两个实现类

package com.uzck.spi.impl;

public class EnglishGreetServiceImpl {
    
    @Override
    public String sayHi(String msg) {
        return "Hello " + msg;
    }
}

public class ChineseGreetServiceImpl {
    
    @Override
    public String sayHi(String msg) {
        return "你好 " + msg;
    }
}

接下来在src/main/res下创建META-INF/services文件夹,并创建文件com.uzck.spi.GreetService,文件内容为

com.uzck.spi.impl.ChineseGreetServiceImpl
com.uzck.spi.impl.EnglishGreetServiceImpl

测试代码如下

public class SPICaller {

    public static void main(String[] args) {
        ServiceLoader<DemoService> serviceLoader = ServiceLoader.load(DemoService.class);
        Iterator<DemoService> it = serviceLoader.iterator();
        while (it != null && it.hasNext()) {
            DemoService service = it.next();
            System.out.println("class " + service.getClass().getName() 
                               + " " + service.sayHi("World"));
        }
    }
}

输出为

class com.uzck.spi.impl.EnglishDemoServiceImpl Hello World
class com.uzck.spi.impl.ChineseDemoServiceImpl 你好, World
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值