前面已经定义好了服务的契约接口以及服务的实现者(加法服务、乘法服务),
本文将开发一个服务消费者,所谓的消费者即消费服务,通过引入相应服务的jar包来自动消费相应的服务。
首先同样新建一个Java工程spi-consumer,
新建服务消费类com.fanyc.test.spi.consumer.Consumer,并添加可执行的main方法。
由于是服务消费者,必须要知道要消费的服务契约即接口定义,所以必须要引入服务契约的定义jar包spi-intface.jar。
消费服务代码如下:
package com.fanyc.test.spi.consumer; import java.util.ServiceLoader; import com.fanyc.test.spi.intface.Computer; /** * 服务消费者 * @author Fanyc * */ public class Consumer { public static void main(String[] args) { ServiceLoader<Computer> sl = ServiceLoader.load(Computer.class); if(sl == null || sl.iterator().hasNext() == false){ System.err.println("未发现服务提供商!"); return; } int a = 20; int b = 5; for(Computer cp : sl){ System.err.println(String.format("服务提供商【%s】执行结果:%s",cp.getClass().getName(),cp.compute(a,b))); } } }
利用ServiceLoader.load方法来加载当前classpath中所有服务实现者。
如果没有服务实现者则返回结果为空,否则返回结果为实现了Iterable接口的列表,
可以通过for循环来遍历所有服务实现者。
在没有引入服务实现者jar包时,运行结果为:
引入spi-provider-add.jar包后,运行结果为:
服务提供商【com.fanyc.test.spi.provider.Add】执行结果:25
再引入spi-provider-multi.jar包后,运行结果为:
服务提供商【com.fanyc.test.spi.provider.Add】执行结果:25 服务提供商【com.fanyc.test.spi.provider.Multi】执行结果:100
由此可以看出SPI可以自动发现并调用服务实现者,而对于服务消费者无需知道到底有几个服务实现者甚至是没有服务实现者,只要在classpath中引用了服务实现者的jar包即可自动调用。
更多服务实现者如减法和除法可自行实现。
至此整个关于《SPI的入门级Demo》系列已经完成。
相关推荐
NULL 博文链接:https://fanyc.iteye.com/blog/2202845
NULL 博文链接:https://fanyc.iteye.com/blog/2202850
NULL 博文链接:https://fanyc.iteye.com/blog/2202836
java spi简单参考,url:https://blog.csdn.net/a925907195/article/details/87088744 主类:testcase,代码很简单,只是自己写个demo看看运行原理
java spi 可运行 demo
SPI通讯设备是主从通讯模式,可以通讯设备双方有主从之分. SPI通讯需要4根线:一条时钟线SCK,两条数据线MOSI,MISO,一条片选信号线CS_N SCK:时钟信号线,用于同步通讯数据,Master产生,决定了通讯的速率。 MOSI;...
linux应用层spi编程demo。C语言实现。如果需要交叉编译请指定Makefile中的CROSS_COMPILE。
SPI_demo.rar
NULL 博文链接:https://k1121.iteye.com/blog/2275121
This standard was prepared by the JEDEC SFDP Task Group authorize by the JC-42.4
一个使用SPI模式读取MS5611气压值和温度值的程序。使用C8051F330单片机。
内核linux4.4 驱动详情可看我博客RK-驱动开发(四)SPI驱动编写和使用,是关于SPI设备和驱动的定义和实现...可供学习如何使用SPI驱动 内含一个很简单的demo,是使用iSPI驱动去编写读写操作,包括 SPI驱动的定义和注册。
SPI 入门中文资料,包括SPI时序,寄存器等详细描述;
采用STM32F103C8T6两块芯片进行主从通讯,一个作为主机,一个作为从机,主机发送数据从机接受数据并打印到串口显示,这是一个简单DEMO,有需要的同学可以参考一下。
海尔LS55AL88H52(111机芯) DH1W70A1301 spi.bin软件 DDR:1.5G.zip
MAX31865 STM32F407通过GPIO模拟SPI时许读取温度 平台:STM32F407 管脚:PB3 PB4 PB4
RC522 SPI+IIC demo板
SPI接口通信源程序,包含SPI通信规则和SPI接口的出错分析及其改进
使用vhdl实现spi读取adxl357三轴方向的加速度计值