java中的SPI机制实现

SPI简介

SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。为某一接口实现服务的机制。

适用场景

项目版本升级,不同开发人员负责自己的模块的升级且互不干扰。(公司项目中场景)

案例说明

  • 接口定义
package com.upgrade;
public interface UpgradeOperation {
    /**
     * 执行更新方法
     */
    void execute(OperationContext context);

    /**
     * 版本信息
     */
    OSVersionBuild build();

    /**
     * 执行同一版本更新优先级(从小到大依次执行)
     * @return
     */
    int priority();

    /**
     * 唯一标识符
     * @return
     */
    String getId();
}
  • 接口实现
    UdsqlUpgradeOperation7_3_1Impl
package com.upgrade.impl;
public class UdsqlUpgradeOperation7_3_1Impl implements UpgradeOperation {

    @Override
    public void execute(OperationContext context) {

    }

    @Override
    public OSVersionBuild build() {
        return OSVersionBuild.VERSION_7_3_1;
    }

    @Override
    public int priority() {
        return 0;
    }

    @Override
    public String getId() {
        return "7.3.1_udsql";
    }
}

UdsqlUpgradeOperation7_3_2Impl

package com.upgrade.impl;
public class UdsqlUpgradeOperation7_3_2Impl implements UpgradeOperation {

    @Override
    public void execute(OperationContext context) {

    }

    @Override
    public OSVersionBuild build() {
        return OSVersionBuild.VERSION_7_3_1;
    }

    @Override
    public int priority() {
        return 0;
    }

    @Override
    public String getId() {
        return "7.3.2_udsql";
    }
}
  • 实现SPI需要在META-INF/services中新建以服务接口命名的文件com.upgrade.UpgradeOperation.内容如下:
com.upgrade.impl.UdsqlUpgradeOperation7_3_1Impl
com.upgrade.impl.UdsqlUpgradeOperation7_3_2Impl
  • 客户端代码
    public static List<UpgradeOperation> getUpgradeOperations() {
        List<UpgradeOperation> upgradeOperations = new ArrayList<>();
        ServiceLoader<UpgradeOperation> operations = ServiceLoader.load(UpgradeOperation.class);
        Iterator<UpgradeOperation> iterator = operations.iterator();
        while (iterator.hasNext()) {
            UpgradeOperation operation = iterator.next();
            upgradeOperations.add(operation);
        }
        return upgradeOperations;
    }

利用SPI机制可以获取目录下所有UpgradeOperation接口的实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,723评论 18 399
  • 本文包括:1、Listener简介2、Servlet监听器3、监听三个域对象创建和销毁的事件监听器4、监听三个域对...
    廖少少阅读 11,479评论 6 28
  • 传送门 解读阿里Java开发手册(v1.1.1) - 异常日志 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 9,848评论 4 50
  • ‖小可‖ "行走在冬夜的冷风中" 这句歌词适用于多种场景,多种心境。 我们无时无刻都在走路,上坡路、下坡路、停滞不...
    Nobodykk阅读 1,702评论 0 0

友情链接更多精彩内容