SPI机制原理+使用

一、概述

SPI全称(Service Provider Interface),是JDK内置的一种服务提供发现机制;SPI机制提供了组件发现和注册方式,可以为应用程序提供灵活的插件机制, 主要原理:接口 + 反射+ 配置文件。

二、规范

定义接口,并为接口提供具体的实现类,实现模块之间的解耦;具体规则如下:

  • 在接口实现模块的resources目录下新建 META-INF/services/目录,并在META-INF/services目录下新建文件:
    • 文件名为SPI接口的权限定名。
    • 文件内容为该接口的具体实现类的权限定名。
  • 将SPI所在的jar放在主程序的classpath中。
  • 服务调用方使用 java.util.ServiceLoader去动态加载META-INF/services目录下具体的实现类到JVM中。

注意:也可以使用@AutoService(xxx.class)注解,无需手动创建目录文件,会在maven打包时自动创建相应的文件,maven依赖如下:


    com.google.auto.service
    auto-service-annotations
    1.0.1

三、实践Demo

SPI机制原理+使用_第1张图片
新建三个模块
SPI机制原理+使用_第2张图片
(1)模块:java-spi-application 对应应用程序
SPI机制原理+使用_第3张图片
pom.xml
SPI机制原理+使用_第4张图片

(2)模块:java-spi-interface对应spi接口定义

  • 定义接口:
    SPI机制原理+使用_第5张图片
  • 定义工厂,此处为加载SPI接口实现类的入口:
    SPI机制原理+使用_第6张图片
    (3)模块:java-spi-provider
  • SPI接口实现类:
    SPI机制原理+使用_第7张图片
  • 在接口实现模块的resources目录下新建 META-INF/services/目录,并在META-INF/services目录下新建文件
    SPI机制原理+使用_第8张图片

你可能感兴趣的:(java)