最近在学习软件架构以及SOA等相关知识,在学习Dubbo的时候发现SPI这个东东,就上网百度来学习一下。
SPI的全名为Service Provider Interface。
我理解的SPI就是调用者只要说明调用什么接口的什么方法即可,无需知道具体的
实现者代码,也无需在代码中实现进行关联引用。这样就将调用方和实现方进行分离,
只要共通遵循接口协议就可以了。
具体SPI的实现过程:
1,调用方和实现方共同契约确定 --- 定义接口A
2,实现方实现共同契约接口A,命名为B
3,实现方的jar包中放入文件META-INF\services\接口类全名A,文件的内容为实现的类全名B
4,ServiceLoader在classpath中加载所有META-INF\services\下名称为接口类全名A的文件,将
里面的内容作为A的实现加载到JVM中。
5,调用方通过ServiceLoader来申明调用接口A,此时会找到所有实现了接口A的实现方
6,调用具体的实现方
在学习OSGi的时候一个典型的加减乘除的例子,拿过来用SPI实现一下:
1,输入参数a和b,
2,调用运算服务
3.1,这时候系统中如果有加法提供方的运算结果则返回a+b,
3.2,如果系统中减法提供方的则返回a-b,
3.3,乘法、除法同理。
这里只实现加法跟乘法做演示,
spi-intface: 申明了各方的契约,即接口定义
spi-provider-add:加法运算服务提供者,依赖spi-intface
spi-provider-multi:乘法运算服务提供者,依赖spi-intface
spi-consumer: 服务的调用者,依赖spi-intface,
如果提供加法运算则依赖spi-provider-add,
乘法运算则依赖spi-provider-multi
相关推荐
这篇“SPI入门级Demo(五:服务消费者)”很可能是讲解如何作为服务消费者来使用SPI机制。下面将详细阐述SPI的核心概念、工作原理以及如何编写一个简单的SPI消费者。 SPI机制主要由以下几个核心组件构成: 1. **...
在本示例中,我们将探讨如何创建一个简单的SPI入门级Demo,具体是关于实现一个加法服务。 首先,理解SPI的基本流程: 1. **定义接口**:服务接口是所有实现者必须遵循的规范。在这个例子中,我们可以定义一个名为`...
本篇将通过一个入门级的Demo来讲解如何创建并使用SPI服务实现者,以乘法服务为例。 首先,我们了解SPI的基本流程: 1. **定义接口**:在SPI机制中,首先要有一个接口,这个接口定义了服务的规范。例如,我们可以...
SPI(Service Provider Interface)是Java平台提供的一种服务发现与加载机制,它允许应用程序在运行时动态地查找并加载实现特定接口的服务。这个概念是Java生态系统中的一个重要组成部分,它为组件化开发提供了强大...
SPI通讯需要4根线:一条时钟线SCK,两条数据线MOSI,MISO,一条片选信号线CS_N SCK:时钟信号线,用于同步通讯数据,Master产生,决定了通讯的速率。 MOSI;主设备输出/从设备输入引脚。数据方向:主机---》从机 MISO...
SPI是一种同步串行接口,常用于连接微控制器和其他外围设备,如传感器、显示器、存储器等。本教程将详细介绍如何在Linux应用层使用C语言编写SPI程序,并通过一个名为"spidev-test"的示例程序来阐述关键步骤。 1. ...
6. **代码示例**:DEMO项目中应包含配置SPI接口、设置主从角色、发送与接收数据的代码片段,以及UART数据打印的函数。 7. **调试技巧**:使用逻辑分析仪检查SPI总线上的信号波形,或者使用示波器观察时钟和数据线的...
java spi简单参考,url:https://blog.csdn.net/a925907195/article/details/87088744 主类:testcase,代码很简单,只是自己写个demo看看运行原理
JEDEC SPI NOR FLASH是一种广泛应用于微控制器(MCU)、嵌入式系统和物联网设备的非易失性存储器技术。SPI(Serial Peripheral Interface)NOR Flash是由JEDEC固态技术协会(Joint Electron Device Engineering ...
STM32 SPI(Serial Peripheral Interface)总线是一种通用的串行通信接口,广泛应用于嵌入式系统中,尤其是在微控制器领域。在这个“SPI.zip”压缩包中,包含的资源是针对STM32微控制器的SPI总线驱动程序,且已通过...
SPI(Serial Peripheral Interface)是一种广泛应用于微控制器和其他设备之间的串行通信接口,它允许设备以全双工模式进行高速数据传输。在FPGA设计中,SPI接口常常被用来与外部设备如传感器、存储器等进行通信。...
Maven坐标:io.springfox:springfox-spi:2.7.0; 标签:springfox、spi、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...
标题中的“软件架构:SPI的Demo”提示我们讨论的主题是关于Software Programming Interface(SPI)的实践示例。SPI是一种在不同模块或组件之间定义服务发现和服务使用的机制,它允许第三方开发者扩展应用程序的功能...
Java SPI(Service Provider Interface)是Java标准库提供的一种服务发现机制,它允许程序在运行时动态地查找并加载实现特定接口的服务提供商。SPI的核心概念在于将服务接口与其实现类解耦,使得开发者可以在不修改...
在这个名为"spi_ctrl_demo_spi_DEMO_"的项目中,开发者使用VHDL(Very High Speed Integrated Circuit Hardware Description Language)来实现一个SPI控制器,用于读取ADXL357三轴加速度计的数据。 ADXL357是一款高...
5. **测试平台**:SPI_demo可能还包括一个简单的测试平台,例如使用LED灯或者模拟SPI设备来验证SPI通信是否正常工作。这有助于开发者直观地观察数据传输的过程。 6. **编译与调试**:项目可能包含Makefile或其他...
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于连接微控制器和其他外围设备,如传感器、显示模块、存储器等。在LPC1788中,SPI通信可以通过SSP(Synchronous Serial Port)模块实现,它支持主...
一个使用SPI模式读取MS5611气压值和温度值的程序。使用C8051F330单片机。
在这个"spi_test.rar_DEMO_spi_test_demo"压缩包中,包含了一个名为"spi_test.c"的源代码文件,这很可能是用于演示SPI通信的一个示例程序,但根据描述,这个DEMO并未正常工作。 SPI协议主要由四条信号线构成:主...
SPI是一种同步串行接口,通常用于连接微控制器与外围设备,如传感器、存储器等。在SPI通信中,主设备(这里是STM32F407)控制时钟线(SCLK),并可以通过数据线MOSI和MISO与从设备(MAX32865)交换数据。此外,还有...