ServiceLoader(一)如何使用JAVA内置spi

SPI

SPI全称是service provider interface,是Java定义的一套服务发现机制,如图:

调用方只需要面向接口,接口的实现由第三方自己去实现,服务启动的时候会自动去发现该服务接口的实现并加载。

代码示例

定义一个接口

随意定义一个接口Speaker

SpiTest

ServiceLoader加载Speaker接口的实现类,将会默认查找META-INF/services目录下的 “cn.lay.demo.spi.Speaker” 文件的内容

这里的cn.lay.demo.spi.Speaker是一个文件名,和Speaker接口全限定名一致

serviceLoader:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/ServiceLoader.html

cn.lay.demo.spi.Speaker文件

文件指明了实现类

实现类

总结

 整个流程大体是:

1、serviceloader加载接口的配置文件

2、根据配置文件配置的实现类加载实现类的实例

所以Java SPI的核心就是:面向接口 + 配置文件 + 多态

参考文章

https://www.jianshu.com/p/46b42f7f593c

https://cxis.me/2017/04/17/Java%E4%B8%ADSPI%E6%9C%BA%E5%88%B6%E6%B7%B1%E5%85%A5%E5%8F%8A%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/

原文地址:https://www.cnblogs.com/lay2017/p/11194625.html