01_Jdk自带SPI

【SPI的设计目标】

面向对象的设计里,模块之间是基于接口编程,模块之间不对实现类进行硬编码。

一旦代码里设计具体的实现类,就违法了可插拔的原则,如果需要替代一种实现,就要修改代码。

为了实现在模块装配的时候,不在模块里面写死代码,就需要一种服务发现机制。

Java spi 就是提供了这样一种机制:

为某个接口寻找服务实现的机制。有点类似IOC的思想,就是讲装配的控制权转移到代码之外。

【SPI的具体约定】

当服务的提供者(provider),提供了一个接口多种实现时,

一般会在jar包的META-INF/services目录下,创建该接口的同名文件。

该文件里面的内容就是该服务的具体实现类的名称。

当外部加载这个模块的时候,就能通过该jar包的META-INF/services/里面的配置文件得到具体的实现类名,并加载实例化,完成模块的装配。

【工厂目录结构】

【service相关的接口和类】

package com.jdk.spi.service;

/**
 *  Service类
 * Created by HigginCui on 2018/9/5.
 */
public interface AnimalService {

    void eat();

}

package com.jdk.spi.service.impl;
import com.jdk.spi.service.AnimalService;
/**
 *  Service实现类CatServiceImpl
 * Created by HigginCui on 2018/9/5.
 */
public class CatServiceImpl implements AnimalService{
    public void eat() {
        System.out.println("猫爱吃鱼...");
    }
}

package com.jdk.spi.service.impl;
import com.jdk.spi.service.AnimalService;
/**
 *  Service实现类CatServiceImpl
 * Created by HigginCui on 2018/9/5.
 */
public class DogServiceImpl implements AnimalService {
    public void eat() {
        System.out.println("狗爱啃骨头...");
    }
}

【com.jdk.spi.service.AnimalService文件中的内容】

com.jdk.spi.service.impl.DogServiceImpl

【JDKSpiTest类】

package com.jdk.spi;

import com.jdk.spi.service.AnimalService;

import java.util.ServiceLoader;

/**
 * Created by HigginCui on 2018/9/5.
 */
public class JdkSpiTest {

    public static void main(String[] args) {
        ServiceLoader<AnimalService> loader = ServiceLoader.load(AnimalService.class);
        for (AnimalService animalService:loader){
            animalService.eat();
        }
    }
}

【运行结果】

原文地址:https://www.cnblogs.com/HigginCui/p/9589470.html

时间: 2024-10-14 06:28:26

01_Jdk自带SPI的相关文章

芯片级通信总线之一:SPI

打算写几篇专题,系统总结下常用的片上总线.现场总线,就先从最常用的SPI开始吧. 1. SPI是干什么的?除了SPI还有那些其它电路板及的通讯总线?有何差别? 相信接触过MCU的同学对SPI都不陌生,详细定义就不罗嗦了.SPI常用的场合包括ADC读写.存储芯片读写.MCU间通讯等等.可以一主多从(通过片选来选择Slave),也可以做成菊花链等等形式的拓扑.与SPI类似的总线还有IIC.UART等,甚至还有很多单根线的总线,原理都是基于简单的串行通信,区别在于收发时序和连接拓扑.要熟练使用这些总线

[SPI]SPI协议详解

转自:https://my.oschina.net/freeblues/blog/67400 1.SPI协议简介 1.1.SPI协议概括 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了

SPI协议

SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM92

Arduino各开发板的比较

https://www.arduino.cn/thread-42417-1-1.html 源地址 一.UNO/UNO r3 Arduino / Genuino Uno是基于ATmega328P的单片机开发板.它有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入脚,16 MHz晶振,USB连接,电源插孔,ICSP接头和复位按钮. 只需使用USB线将其连接到计算机,或者使用AC-to-DC适配器或电池为其供电即可开始使用.您可以修改您的UNO而不用担心做错任何事情,最糟糕的情况也只

dubbo源码阅读-Filter默认实现(十一)之CacheFiler

API文档 http://dubbo.apache.org/zh-cn/docs/user/demos/result-cache.html 缓存使用例子 可参考:https://blog.csdn.net/hardworking0323/article/details/81293402 CacheFilter /** * CacheFilter * group为consumer或者provider 同时 含有cache=的配置的时候 返回此过滤器 */ @Activate(group = {Co

linux enc28j60网卡驱动移植(硬件spi和模拟spi)

本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因...刚好手上有一个enc28j60的网卡模块,于是就着手移植enc28j60的驱动. 其实移植enc28j60的驱动也十分简单,网上有现成的,只需要分配一些硬件资源即可. 由于我的内核版本老到掉牙,没有自带enc28j60的驱动,只能在网上找一个: enc28j60.c http://git.ti.com/ti-linux-kernel/ti-li

SPI

STM32-SPI使用 SPI知识: 1) 高速同步串行口.3-4线接口(CS ,CLK ,MOSI,MISO),收发独立.可同步进行. 2)SPI分为主从模式,主模式提供时钟和片选选择信号. 3) 模式控制:CPOL用来控制时钟信号(clk)在空闲时候的状态:CPHA用来控制采样时刻时CLK的边缘动作. CPOL CPHA 模式 0 0 CLK空闲时为低电平,CLK上升沿采样数据. 0 1 CLK空闲为低电平,CLK下降沿采样数据. 1 0 CLK空闲时为高电平,CLK上升沿采样数据. 1 1

SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK).串行数据输出(SDO).串行数据输入(SDI).SPI总线可以实现多个SPI设备互相连接.提供SPI串行时钟的SPI

嵌入式通讯开发 SPI,UART,I2C都有什么区别

SPI,UART,I2C都有什么区别,及其各自的特点 区别:SPI:高速同步串行口.3-4线接口,收发独立.可同步进行 UART:通用异步串行口.按照标准波特率完成双向通讯,速度慢 I2C:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口 Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片.有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它