当前位置: 首页 > article >正文

5分钟学会SPI

SPI

  • 定义SPI 是一种机制,允许用户在不修改现有代码的情况下扩展和替换特定服务的实现。它定义了一组接口(Service Interfaces)和一组实现(Service Providers),使得应用程序可以动态加载和使用这些实现。
  • 特征
    • 接口与实现分离:SPI 定义了一组接口,而具体的实现则由服务提供者提供。这种分离有助于实现代码的灵活性和可维护性。
    • 动态加载:通过使用反射和配置文件,应用程序可以在运行时动态加载服务实现。这使得应用程序可以根据不同的需要选择不同的服务提供者。
    • 可扩展性:SPI 允许开发者轻松添加新的服务实现而无需修改应用程序的核心代码,增强了系统的可扩展性。
    • 模块化设计:SPI 提供了一种模块化的方式来组织代码,使得不同的功能模块可以独立开发和更新。

在SpringBoot中它通过在ClassPath路径下的META-INF/services中查找文件,自动加载文件中所定义的类。这一机制为很多框架扩展提供了可能。自动装配也是用到了这个机制。

应用举例

  • 一个典型的应用场就是JDBC,数据库种类有很多,如果每一种数据库都要有自己的一套特殊的API的话是不合理的,对于使用人员也是不方便的,由此JDK就定义了一套JDBC的规范,JDK只定义接口,由不同的数据库厂商自己去做实现,对于操作人员来说操作的是同一套接口
  • 图示
    在这里插入图片描述

jdk的接口定义
jdk的接口定义
其实就是定义接口,服务商去实现,在使用数据库的时候会导入对应jar包,里面其实就是这些接口的具体实现。
还存在一个问题,程序怎么知道接口是由哪些java类实现的呢?
那就是一个约定:在META-INF/service文件下创建接口名的文件,内容就是接口的实现类的全类路径

代码示例

  • 定义一个接口
    基础接口
  • 创建一个Mysql实现
    引入接口包
  • 实现接口
    实现接口
  • 按照spi规则创建文件以及填充内容
    按照spi规则创建文件以及描述信息
  • 创建testSpi项目引入mysql的实现类
    引入mysql的实现
  • 加载实现打印实现
    实现打印结果
  • 创建一个oracle实现
    步骤与mysql的实现是一样的,直接看结果
  • 引入oracle包
    引入oracle包
  • 查看结果
    在这里插入图片描述

http://www.kler.cn/news/330266.html

相关文章:

  • MySQL基础练习题49-低质量的问题
  • 【动态规划】完全背包问题
  • 媒介坊:软文自助发布平台,开启营销新篇章
  • 什么是大语言模型的大海捞针指标
  • 【数据库差异研究】update与delete使用表别名的研究
  • Swift并发笔记
  • 「4.3」维护序列
  • 多系统萎缩患者必看!这些维生素助你对抗病魔
  • Docker的入门详解
  • 第十四讲-输入控件QPlainTextEdit
  • redis数据库学习一
  • [Cocoa]_[初级]_[使用NSNotificationCenter作为目标观察者实现时需要注意的事项]
  • STM32F103C8----3-1 LED闪烁(跟着江科大学STM32)
  • 【TypeScript】异步编程
  • Django Nginx+uwsgi 安装配置
  • Python开发环境配置(mac M2)
  • Qt 教程全集目录公布(方便查阅)
  • 基于单片机人体反应速度测试仪系统
  • STM32中断控制点灯
  • 物理学基础精解【30】