美文网首页
Java中SPI应用

Java中SPI应用

作者: 紫石南 | 来源:发表于2018-02-27 18:10 被阅读136次

SPI介绍

Java中SPI的概念是一种服务发现的机制,从1.6开始支持该功能。具体来说就是一个接口有多个实现的时候,可以通过SPI动态加载具体实现。

源码再现

从1.6开始,增加了java.util.ServiceLoader类,用于扫描某个接口的具体实现类。

public final class ServiceLoader<S>
    implements Iterable<S>
{

    private static final String PREFIX = "META-INF/services/";

    // The class or interface representing the service being loaded
    private final Class<S> service;

    // The class loader used to locate, load, and instantiate providers
    private final ClassLoader loader;

从源码看出,ServiceLoader是一个泛型类,可以指定某个接口,它会扫描META-INF/services/路径下以相关接口的全路径类名命名的文件,文件中写入所有需要扫描的实现类名即可。

举个例子

1.首先定义一个接口SpiInterface,假如包名为com.spi.test
2.再定义它的若干实现类,假如包名为com.spi.test.impl
3.在META-INF/services/新建文件com.spi.test.SpiInterface

com.spi.test.impl.ASpiInterface
com.spi.test.impl.CSpiInterface
com.spi.test.impl.BSpiInterface

4.通过ServiceLoader获取实现

        ServiceLoader<SpiInterface> loaders = ServiceLoader.load(SpiInterface.class);
        for (SpiInterfacein : loaders) {
            in.sayHello();
        }

应用场景

1.厂家定义接口,如老版本的sql驱动等
2.日志统一接口
3.api版本控制,不同的版本实现可以用继承,根据不同的版本号找对应的实现类

替代方案

自己完成类似SPI的功能,可以使用普通的类加载器去动态加载实现类,也可以使用spring的import org.springframework.context.ApplicationContext获取。但SPI实现更简单,而且api内置集成,推荐使用。

样列源码

相关文章

  • dubbo的spi机制

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

  • Java中SPI应用

    SPI介绍 Java中SPI的概念是一种服务发现的机制,从1.6开始支持该功能。具体来说就是一个接口有多个实现的时...

  • 类加载器应用

    类加载器在编码中应该如何应用了?在JDK源码中最典型的应用Java SPI服务发现机制,业务代码中的应用就是自定义...

  • SPI原理解析一

    SPI(service provider Interfaces),对于Java中的实现SPI类ServiceLoa...

  • Java - SPI机制

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

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

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

  • dubbo 源码分析 -SPI

    dubbo 中大量使用SPI,在看源码之前必须先了解dubbo的SPI 1、Java原生spi java原生spi...

  • spi

    java中有一些包结尾为spi,如java.nio.channels.spi spi - service prov...

  • 4.Dubbo的SPI扩展点加载机制

    4.1 加载机制概述 4.1.1 Java SPI 在讲Dubbo SPI之前,先来了解一下Java SPI,SP...

  • Dubbo SPI的认识

    Dubbo是基于Java原生SPI机制思想的一个改进. 关于JAVA 的SPI机制 SPI全称(service p...

网友评论

      本文标题:Java中SPI应用

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