首页 > 其他 > 详细

SPI 实现运用及原理

时间:2019-05-01 16:58:15      阅读:127      评论:0      收藏:0      [点我收藏+]

SPI实现

1. 建立maven工程

技术分享图片

(1)spi-demo-api 提供需要实现的接口

public interface SpiDemo {
    void say();
}

(2)spi-demo-impl1 为第一种实现

public class SpiDemoImpl1 implements SpiDemo {
    public void say() {
        System.out.println("SpiDemoImpl1");
    }
}

每一个SPI接口都需要在自己项目的静态资源目录中声明一个services文件,文件名为实现规范接口的类名全路径。在resources目录中创建\META-INF\services目录,创建以com.hanggle.spi.api.SpiDemo为名的文件。(文件名即是要实现的接口类的全路径如下图)

技术分享图片

技术分享图片

 

技术分享图片

文件内容:

com.hanggle.spi.api.impl1.SpiDemoImpl1

 

(3)spi-demo-impl2 为第二种实现 

public class SpiDemoImpl2 implements SpiDemo {
    public void say() {
        System.out.println("SpiDemoImpl2");
    }
}

同spi-demo-impl1一样

在resources目录中创建\META-INF\services目录,创建以com.hanggle.spi.api.SpiDemo为名的文件。

 文件内容:

com.hanggle.spi.api.impl1.SpiDemoImpl2

 

(4)spi-demo-main 程序中的使用

public static void main(String[] args) {
        ServiceLoader<SpiDemo> serviceLoader = ServiceLoader.load(SpiDemo.class);
        for (SpiDemo o : serviceLoader) {
            o.say();
        }
    }

运行结果:

技术分享图片

 

SPI原理

 java SPI应用场景很广泛,在Java底层和一些框架中都很常用,比如java数据驱动加载和Dubbo。Java底层定义加载接口后,由不同的厂商提供驱动加载的实现方式,当我们需要加载不同的数据库的时候,只需要替换数据库对应的驱动加载jar包,就可以进行使用。

 

SPI 实现运用及原理

原文:https://www.cnblogs.com/oskyhg/p/10800051.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!