`

SPI入门级Demo(一:初识)

    博客分类:
  • SPI
阅读更多

最近在学习软件架构以及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入门级Demo(五:服务消费者)”很可能是讲解如何作为服务消费者来使用SPI机制。下面将详细阐述SPI的核心概念、工作原理以及如何编写一个简单的SPI消费者。 SPI机制主要由以下几个核心组件构成: 1. **...

    SPI入门级Demo(三:服务实现者-加法服务)

    在本示例中,我们将探讨如何创建一个简单的SPI入门级Demo,具体是关于实现一个加法服务。 首先,理解SPI的基本流程: 1. **定义接口**:服务接口是所有实现者必须遵循的规范。在这个例子中,我们可以定义一个名为`...

    SPI入门级Demo(四:服务实现者-乘法服务)

    本篇将通过一个入门级的Demo来讲解如何创建并使用SPI服务实现者,以乘法服务为例。 首先,我们了解SPI的基本流程: 1. **定义接口**:在SPI机制中,首先要有一个接口,这个接口定义了服务的规范。例如,我们可以...

    SPI入门级Demo(二:契约即接口定义)

    SPI(Service Provider Interface)是Java平台提供的一种服务发现与加载机制,它允许应用程序在运行时动态地查找并加载实现特定接口的服务。这个概念是Java生态系统中的一个重要组成部分,它为组件化开发提供了强大...

    linux平台spi通信测试C语言demo程序

    SPI通讯需要4根线:一条时钟线SCK,两条数据线MOSI,MISO,一条片选信号线CS_N SCK:时钟信号线,用于同步通讯数据,Master产生,决定了通讯的速率。 MOSI;主设备输出/从设备输入引脚。数据方向:主机---》从机 MISO...

    linux应用层spi编程demo

    SPI是一种同步串行接口,常用于连接微控制器和其他外围设备,如传感器、显示器、存储器等。本教程将详细介绍如何在Linux应用层使用C语言编写SPI程序,并通过一个名为"spidev-test"的示例程序来阐述关键步骤。 1. ...

    SPI主从通讯Demo2019_3_24

    6. **代码示例**:DEMO项目中应包含配置SPI接口、设置主从角色、发送与接收数据的代码片段,以及UART数据打印的函数。 7. **调试技巧**:使用逻辑分析仪检查SPI总线上的信号波形,或者使用示波器观察时钟和数据线的...

    spi-demo java spi小例子

    java spi简单参考,url:https://blog.csdn.net/a925907195/article/details/87088744 主类:testcase,代码很简单,只是自己写个demo看看运行原理

    JEDEC SPI NOR FLASH

    JEDEC SPI NOR FLASH是一种广泛应用于微控制器(MCU)、嵌入式系统和物联网设备的非易失性存储器技术。SPI(Serial Peripheral Interface)NOR Flash是由JEDEC固态技术协会(Joint Electron Device Engineering ...

    SPI.zip_site:www.pudn.com_stm32 spi

    STM32 SPI(Serial Peripheral Interface)总线是一种通用的串行通信接口,广泛应用于嵌入式系统中,尤其是在微控制器领域。在这个“SPI.zip”压缩包中,包含的资源是针对STM32微控制器的SPI总线驱动程序,且已通过...

    SPI.zip_spi_spi vivado_spi接口代码_vivado spi接口_vivado中spi程序

    SPI(Serial Peripheral Interface)是一种广泛应用于微控制器和其他设备之间的串行通信接口,它允许设备以全双工模式进行高速数据传输。在FPGA设计中,SPI接口常常被用来与外部设备如传感器、存储器等进行通信。...

    springfox-spi-2.7.0-API文档-中文版.zip

    Maven坐标:io.springfox:springfox-spi:2.7.0; 标签:springfox、spi、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    软件架构:SPI的Demo

    标题中的“软件架构:SPI的Demo”提示我们讨论的主题是关于Software Programming Interface(SPI)的实践示例。SPI是一种在不同模块或组件之间定义服务发现和服务使用的机制,它允许第三方开发者扩展应用程序的功能...

    java spi 可运行 demo

    Java SPI(Service Provider Interface)是Java标准库提供的一种服务发现机制,它允许程序在运行时动态地查找并加载实现特定接口的服务提供商。SPI的核心概念在于将服务接口与其实现类解耦,使得开发者可以在不修改...

    spi_test.rar_DEMO_spi_test_demo

    在这个"spi_test.rar_DEMO_spi_test_demo"压缩包中,包含了一个名为"spi_test.c"的源代码文件,这很可能是用于演示SPI通信的一个示例程序,但根据描述,这个DEMO并未正常工作。 SPI协议主要由四条信号线构成:主...

    spi_ctrl_demo_spi_DEMO_

    在这个名为"spi_ctrl_demo_spi_DEMO_"的项目中,开发者使用VHDL(Very High Speed Integrated Circuit Hardware Description Language)来实现一个SPI控制器,用于读取ADXL357三轴加速度计的数据。 ADXL357是一款高...

    MS5611-SPI.zip_SPI MS5611_ms5611 spi程序_ms5611_spi.cpp_site:www.

    一个使用SPI模式读取MS5611气压值和温度值的程序。使用C8051F330单片机。

    SPI_demo.rar

    5. **测试平台**:SPI_demo可能还包括一个简单的测试平台,例如使用LED灯或者模拟SPI设备来验证SPI通信是否正常工作。这有助于开发者直观地观察数据传输的过程。 6. **编译与调试**:项目可能包含Makefile或其他...

    LPC1788 SPI 主从模式两个程序

    SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于连接微控制器和其他外围设备,如传感器、显示模块、存储器等。在LPC1788中,SPI通信可以通过SSP(Synchronous Serial Port)模块实现,它支持主...

    MAX31865 STM32F407通过GPIO模拟SPI时序读取温度平台:STM32F407管脚:PB3 PB4 PB4

    SPI是一种同步串行接口,通常用于连接微控制器与外围设备,如传感器、存储器等。在SPI通信中,主设备(这里是STM32F407)控制时钟线(SCLK),并可以通过数据线MOSI和MISO与从设备(MAX32865)交换数据。此外,还有...

Global site tag (gtag.js) - Google Analytics