SPI

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

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

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

代码示例

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

定义一个接口

随意定义一个接口Speaker

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

SpiTest

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

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

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

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

cn.lay.demo.spi.Speaker文件

文件指明了实现类

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

实现类

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

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

总结

 整个流程大体是:

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/

相关文章:

  • 2021-08-08
  • 2021-10-25
  • 2021-10-11
  • 2022-12-23
  • 2021-12-18
  • 2021-06-21
猜你喜欢
  • 2022-12-23
  • 2021-09-25
  • 2022-12-23
  • 2021-04-14
  • 2021-10-11
  • 2022-12-23
  • 2021-07-03
相关资源
相似解决方案