JDK SPI配置

文章介绍了JavaSPI(ServiceProviderInterface)机制,用于动态发现和加载接口的实现类。通过定义Phone接口和其AndroidPhone、IosPhone实现类,展示了如何配置META-INF.services文件来指定实现类,并利用ServiceLoader加载和调用这些实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章:https://blog.51cto.com/u_13423706/5818612

SPI

概念

为某个接口寻找其实现类的机制
可以用于扩展

实现三板斧

一. 接口与实现

  1. Phone接口
/**
 * Phone接口
 */
public interface Phone {

    // 打电话
    public void call();
}
  1. AndroidPhone实现类
public class AndroidPhone implements Phone {

    @Override
    public void call() {
        System.out.println("Android Phone call.........");
    }
}

  1. IosPhone实现类
public class IosPhone implements Phone {

    @Override
    public void call() {
        System.out.println("Ios Phone call........");
    }
}

二.配置文件
在java或resource下创建META-INF.services文件夹(规定)
创建 以接口位置为名,内容为实现类的文件
在这里插入图片描述

com.bjpowernode.spi.impl.AndroidPhone
com.bjpowernode.spi.impl.IosPhone

三.ServiceLoader加载

public class Test {
    public static void main(String[] args) {
        ServiceLoader<Phone> serviceLoader = ServiceLoader.load(Phone.class);

        serviceLoader.forEach((Phone phone)->{
            if(phone instanceof DefaultPhone){
                phone.call();
            }
            if(phone instanceof AndroidPhone){
                phone.call();
            }
            if(phone instanceof IosPhone){
                phone.call();
            }
        });
    }
}

踩坑
注意对应的文件名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值