博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解SPI机制
阅读量:2065 次
发布时间:2019-04-29

本文共 822 字,大约阅读时间需要 2 分钟。

SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。

Dubbo、JDBC中都使用到了SPI机制,springboot也使用了spi机制,但是它并没有使用原生的,而是自己做了扩展。例子说明
工程结构
新建spi-interface工程,编写接口StuService和方法run

新建spi-girl类,引入spi-interface工程依赖,

StuGirlServiceImpl实现接口StuService

在resources文件夹下新建META-INF/services目录,然后新建文件名称是StuService的包名+接口名,文件内容放入他的实现类StuGirlServiceImpl

新建spi-boy类,引入spi-interface工程依赖,

StuBoyServiceImpl实现接口StuService

在resources文件夹下新建META-INF/services目录,然后新建文件名称是StuService的包名+接口名,文件内容放入他的实现类StuBoyServiceImpl

 

编写测试类,spi-test,引入spi-interface工程依赖,新建测试类SpiTest

运行代码,没输出任何东西。

引入spi-girl工程

再引入spi-boy工程

可以发现,我们需要那个只需要引入jar包就可以了,非常易于扩展。打开ServiceLoader.load源码,

路径是写死的所以必须在META-INF/services目录。加载过程,获取当前类的加载器,然后再调用load的重载方法

在调用 构造函数

通过next获取文件里的实现类

获取文件里的类名,通过反射获取到对象,调用方法

我们可以发现通过路径+文件名,找到所有放入的文件,然后放入configs对象里

 

转载地址:http://dswmf.baihongyu.com/

你可能感兴趣的文章
云原生周报第 2 期 | 2019-07-01~2019-07-05
查看>>
kubectl 创建 Pod 背后到底发生了什么?
查看>>
Kube-scheduler 源码分析(二):调度程序启动前逻辑
查看>>
kubernetes 1.15 有哪些让人眼前一亮的新特性?
查看>>
云原生周报:第 3 期
查看>>
深入理解 Linux Cgroup 系列(三):内存
查看>>
7月最新Java微服务资料
查看>>
Linux 指令
查看>>
wi10优化
查看>>
windows console 颜色设置
查看>>
VC unicode下Cstring转char*
查看>>
MFC ListBox使用
查看>>
Linux 使用grep筛选多个条件
查看>>
H264 NALU分析(sps,pps,关键帧,非关键帧)
查看>>
Windows文本加载wscite的使用
查看>>
浏览器主页被篡改修复
查看>>
FFmpeg - 新老接口对比问题
查看>>
Windows下MinGW编译ffmpeg库
查看>>
SDL在windows下使用 - 显示YUV
查看>>
三种方式YUV420转RGB24/BGR24,实测可用
查看>>