1、spi简单说明
spi,即service privider interface,是jdk为厂商和插件提供的一种解耦机制。
spi的具体规范为:当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并通过反射机制实例化,完成模块的注入。 基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里制定。jdk提供服务实现查找的一个工具类:java.util.ServiceLoader
2、spring-web中的具体应用
从servlet3.0开始,web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能。每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类,那么,当web容器启动时就会运行这个初始化器做一些组件内的初始化工作。
一般伴随着ServletContainerInitializer一起使用的还有HandlesTypes注解,通过HandlesTypes可以将感兴趣的一些类注入到ServletContainerInitializerde的onStartup方法作为参数传入。
spring-web的jar定义了一个具体的实现类,SpringServletContainerInitializer,并且在META-INF/services/目录下定义了如下文件:
文件的具体的内容为:org.springframework.web.SpringServletContainerInitializer。
3、SpringServletContainerInitializer
通过源码发现,配合注解@HandlesTypes它可以将其指定的Class对象作为参数传递到onStartup方法中。进而在onStartup方法中获取Class对象的具体实现类,进而调用实现类中的具体方法。SpringServletContainerInitializer类中@HandlesTypes指定的是Class对象是WebApplicationInitializer.Class。
利用这个机制,若实现WebApplicationInitializer这个接口,我们就可以自定义的注入Servlet,或者Filter,即可以不再依赖web.xml的配置。
原文链接:https://blog.csdn.net/pingnanlee/article/details/80940993
相关推荐
3. **嵌入式Web服务器**:Servlet 3.0规范支持直接在应用程序中内嵌Web服务器,无需外部部署服务器。这使得开发和测试环境的搭建变得更加便捷,例如Jetty或Tomcat等服务器可以通过API直接启动。 4. **Pluggable ...
"FET32.pdf"可能涉及FET(Field-Effect Transistor,场效应晶体管)在高速数据传输中的应用,因为高速SD卡接口的设计中,高速开关元件如FET是关键组成部分。最后,"MMCSDTimming.pdf"应当提供了关于MMC和SD卡的时序...
1. 受限于 JVM:SPI 机制只能在 JVM 中使用,无法在 native 环境中使用。 2. Limited flexibility:SPI 机制的配置文件只能在 META-INF/services 文件夹中,限制了灵活性。 SPI 机制的实现步骤: 1. 定义接口:...
Java类加载机制和SPI(ServiceProviderInterface)机制是Java平台中极其重要的两个概念,它们对于Java程序的灵活性和可扩展性起到关键作用。下面详细解释这两个机制的概念、原理和应用场景。 类加载机制是Java...
### USB3.0技术及其应用详解 #### 一、USB3.0技术概述 随着数字化媒体的迅速普及和发展,人们对数据传输的需求日益增加,现有的连接技术逐渐无法满足高速传输的需求。为此,USB3.0技术应运而生,旨在大幅提升传输...
SPI 机制的核心思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,能够实现解耦。 SPI 机制的实现原理是通过在 classpath 下的 META-INF/services/ 目录中创建一个以服务接口命名的文件,该文件...
本文将深入探讨SPI在嵌入式Linux系统中的应用,主要关注如何配置和使用SPI设备。 在嵌入式Linux系统中,SPI通常通过内核驱动来支持。首先,你需要确保你的Linux内核编译时包含了SPI子系统。这可以通过查看.config...
在总结上述内容时,我们可以看到,改进型SPI通信机制的设计充分考虑了工业嵌入式系统对通信可靠性的高要求,通过引入数据校验、握手和应答机制,有效地解决了传统SPI通信机制中固有的可靠性问题。这种改进不仅提高了...
SPI(Service Provider Interface)是Java提供的一种服务发现和服务使用的机制,它允许开发者通过定义接口并在配置文件中指定实现类的方式,动态地加载服务实现。SPI的思想核心在于解耦,使得服务使用者无需关注服务...
在实际应用中,SPI通信常用于连接各种外设,如LCD显示屏、EEPROM、实时时钟、ADC、DAC等。例如,使用SPI与EEPROM通信,可以通过控制SS引脚选中特定的EEPROM,然后通过SPI接口读写数据,实现数据的存储和读取。 总的...
Linux应用层SPI编程涉及到在Linux操作系统中通过SPI(Serial Peripheral Interface)总线与硬件设备进行通信的技术。SPI是一种同步串行接口,常用于连接微控制器和其他外围设备,如传感器、显示器、存储器等。本教程...
USB3.0技术以其高速的传输...总而言之,USB3.0 Layout设计是一个复杂的过程,需要综合考虑电源、信号完整性、EMI/ESD防护以及硬件接口的兼容性等多个方面,以确保设计的USB3.0设备能够在高速数据传输中保持高效和稳定。
stm32103系类单片机 片上SPI实验 3.0和3.5的库,两个都在压缩包中.实现stm32 spi1与spi2之间的全双工通信。keil工程,根据需要改下cpu选型,连接pa5<-->pb13,pa6<-->pb14,pa7<-->pb15即可。
服务接口定义:在SPI机制中,首先我们需要定义一个服务接口,这个接口定义了对外公开的方法,供其他组件调用。例如,我们可以定义一个名为`ServiceProvider`的接口: ```java public interface ServiceProvider { ...
**API-SPI**(Application Programming Interface - Service Provider Interface)是XFS3.0的核心部分,定义了应用程序与文件系统服务提供商之间的通信协议。API是用户空间程序用来与文件系统交互的接口,而SPI则是...
SPI机制则是一种服务发现机制,它定义在`java.util.ServiceLoader`类中。开发者可以通过在类路径下的META-INF/services目录下创建以服务接口全限定名命名的文本文件,文件内容列出实现了该接口的所有类,然后使用...
- 在VHDL实现中,需要理解SD卡协议,如CMD(命令)和DATA(数据)传输,以及相应的错误检测和响应机制。 5. 在Altera EMP7128上的应用 - Altera EMP7128是一款FPGA器件,具有丰富的逻辑资源和高速I/O接口,适合...
该项目为基于SPI机制设计的SpringBoot框架样例,旨在实现外部插件的热插拔功能,共计包含49个文件,其中...该样例项目通过SPI机制,提供了灵活的外部插件扩展和热更新能力,适用于需要动态加载和卸载插件的应用场景。