zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Java的SPI机制学习笔记

2023-02-18 16:33:55 时间

SPI的全称为service provider interface,最初是提供给厂商做插件开发的,概况来说就是java提供了一种插件的方式,通过修改项目之外的一些配置即可做到代码逻辑的变动。这块我们学习一下java定义的这种特性如何使用。

Java spi使用了策略模式,一个接口多种实现。我们只需申明接口,具体的实现并不在程序中直接确认,而是有程序之外的配置决定。具体的实现步骤如下:

1、定义一个接口

2、编写接口的实现类

3、在resource/META-INF/services/目录下创建以接口全路径命名的文件。

4、在步骤3中的文件中添加步骤2的实现类的全路径

5、通过java.util.serviceLoader来加载具体的实现类。

这块大概写个demo

测试调用方法:

public class Test {

    public static void main(String[] args) {
        Iterator provider = Service.providers(MySpi.class);
        ServiceLoader loader = ServiceLoader.load(MySpi.class);
        while (provider.hasNext()){
            MySpi mySpi = (MySpi) provider.next();
            mySpi.print();
        }
        Iterator iterator=loader.iterator();
        while (iterator.hasNext()){
            MySpi mySpi= (MySpi) iterator.next();
            mySpi.print();
        }
    }
}

JAVA的SPI机制更多的使用是在框架层面的扩展,比如MySql的驱动器的加载,SpringFacties文件内容的加载也使用到了SPI机制。我们大概了解一下JAVA提供的这种机制,因为Dubbo使用到这种SPI机制,当然Dubbo对其进行一些改变,我们提前了解下,这样后边就相对比较容易了。

很多问题我们知道一些条件那么它的整体就全知道了,SPI机制就是这样的最简单的例子,我们把接口和实现类的关系通过文件名和文件内容进行了关联,所以这是明确的,SPI机制本质上也就是个小创新而已。

晚安