美文网首页
java中的SPI机制实现

java中的SPI机制实现

作者: wubo | 来源:发表于2017-05-02 09:31 被阅读105次

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接口的实现。

相关文章

  • Java中的SPI机制及接口多实现调用

    Java中的SPI机制及接口多实现调用 0x00 SPI机制 SPI 全称为 (Service Provider ...

  • 基于spring factories机制开发SDK

    SPI机制:为某个接口寻找服务实现的机制 java SPI就是提供这样的一个机制 ,需要在META-INF目录中设...

  • java SPI入门详解

    Java SPI机制详解 1、什么是SPI? ​ 如上图所示,接口对应的抽象SPI接口;实现方实现SP...

  • dubbo的spi机制

    SPI SPI是一种扩展机制,在java中SPI机制被广泛应用,比如Spring中的SpringServletCo...

  • SPI机制

    SPI的全名为Service Provider Interface,是Java实现面向接口的解耦机制。通过SPI,...

  • dubbo的spi机制

    dubbo的spi机制 dubbo的扩展点加载机制源自于java的spi扩展机制。那么,何为java的spi扩展机...

  • Java SPI 机制解析

    本文以JDBC为例深入讲解 java spi 机制,将帮助你理解:什么是SPI,SPI实现原理,SPI的使用和SP...

  • java中的SPI机制实现

    SPI简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供...

  • 轻量级RPC设计与实现第四版

    在本版本中引入了SPI机制,关于Java的SPI机制与Dubbo的SPI机制在以前的文章中介绍过。传送门:Dubb...

  • Java - SPI机制

    Java - SPI机制 SPI是什么 SPI全称Service Provider Interface,是Java...

网友评论

      本文标题:java中的SPI机制实现

      本文链接:https://www.haomeiwen.com/subject/hjcctxtx.html