Spring Boot 的SPI机制

文章介绍了JavaSPI(ServiceProviderInterface)机制,这是一种用于框架扩展和组件替换的服务发现机制。SPI通过ServiceLoader加载classPath和Jar包中的配置文件来找到接口的不同实现。文中通过创建VedioSPI接口及两个实现类(Mp3Vedio和Mp4Vedio)作为示例,展示了如何在META-INF/services下配置文件以供SPI加载,并提供了测试代码展示其工作原理。最终,运行结果显示出SPI成功加载并执行了两个实现类的方法。

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

简介

SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要用于框架中开发,例如:Dubbo、Spring、Common-Logging、JDBC等采用SPI机制,针对同一接口采用不同实现提供给不同用户,从而提高了框架的扩展性。

Java SPI实现

Java 内置的SPI通过java.util.ServiceLoader类解析classPath和Jar包的META-INF/services/目录 下的以接口全限定名命名的文件,并加载该文件中指定的接口实现类,以此完成调用。

示例说明

创建动态接口

public interface VedioSPI{
    void call();
}

实现类1

public class Mp3Vedio implements VedioSPI{
    @Override
    public void call(){
        System.out.println("this is mp3 call");
    }
}

实现类2

public class Mp4Vedio implements VedioSPI{
    @Override
    public void call(){
        System.out.println("this is mp4 call");
    }
}

在项目的source目录下新建META-INF/services/目录下,创建com.skywares.fw.juc.spi.VedioSPI文件。

com.skywares.fw.juc.spi.Mp3Vedio
com.skywares.fw.juc.spi.Mp4Vedio

相关测试

public class VedioSPITest{
    public static void main(String[] args){
        ServiceLoader<VedioSPI> serviceLoader = ServiceLoader.load(VedioSPI.class);
        serviceLoader.forEach(t->{
            t.call();
       });
    }
}

说明:java实现SPI是通过ServiceLoader来查找服务提供的工具类。

运行结果

this is mp3 call
this is mp4 call

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值