- 看到公司的项目代码中,在META-INF下service中定义了一些文件。文件名都是以全限定类名的方式命名的,而且没每个文件里的内容也是一堆全限定类名的值。搞不懂这些是什么用途,遂百度了一下
-
看到了一篇介绍java中spi的博客链接,该博客中对于java的spi机制做了一些介绍,博客链接附上:点击打开链接
-
传统的应用中,我们对于一个接口有多个实现类。每一个实现类我们在使用的时候,都是动态去调用的。如果是基于java的spi,我们可以通过在工程的META-INF的service文件夹下创建基于接口的全限定类名的文件,文件内容是对于这个接口提供的多个实现类,内容的格式是一个实现类的全限定类名为一行。
下面通过一个具体的案例来说明spi的实现方式(官方的文档里,对于serviceloader的讲解里有一个具体的例子。):
-
首先我们定义一个接口类 com.example.CodeSet,该类中定义了一组针对于某种协议的编码解码的接口方法:
public abstract Encoder getEncoder(String encodingName);
public abstract Decoder getDecoder(String encodingName);
每个方法都根据提供的编码返回一个特定的对象,如果该方法不支持该编码格式则返回null
-
我们再定义一个实现类com.example.impl.StandardCodecs,它实现了接口CodeSet中定义的方法
-
我们在工程中创建如下格式的文件META-INF/services/com.example.CodecSet,其中com.example.CodecSet是一个文件名(该文件是基于接口的全限定类名命名的)
-
我们在CodeSet类,初始化的时候创建和保存一个单一的service instance:private static ServiceLoader<CodecSet> codecSetLoader = ServiceLoader.load(CodecSet.class);
-
定义了一个静态工厂方法,根据提供的编码名字,去迭代每一个方法的具体实现者,返回相关的编码和解码对象:public static Encoder getEncoder(String encodingName) {
for (CodecSet cp : codecSetLoader) {
Encoder enc = cp.getEncoder(encodingName);
if (enc != null)
return enc;
}
return null;
}
至此对于spi的一个实现的,就大功告成啦!!!
附上项目结构:
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
Java SPI 机制详解 Java SPI 机制,全称 Service Provider Interface,是 Java 内置的服务发现机制。SPI 机制的主要思想是解耦,通过提供一个标准接口,允许第三方提供实现类,而无需在程序中硬编码。SPI 机制广泛...
SPI机制则是一种服务提供者接口的机制,它允许第三方为某个接口实现提供实现,通过扩展名定的目录(通常是META-INF/services/目录)中的配置文件,服务提供方指定的实现类的全限定名,从而使得服务加载器可以动态地...
Java SPI 机制详解 Java SPI(Service Provider Interface)机制是一种服务提供发现机制,能够实现框架的扩展和替换组件,主要被框架的开发人员使用。SPI 机制的核心思想是将装配的控制权移到程序之外,在模块化...
Dubbo作为一款高性能的Java RPC框架,也引入了类似的SPI机制,但相对于Java内置的SPI,Dubbo的SPI机制更为强大和灵活。Dubbo的SPI机制主要由`dubbo-common`模块中的`ExtensionLoader`类实现,它支持以下特性: 1. ...
该项目为基于SPI机制设计的SpringBoot框架样例,旨在实现外部插件的热插拔功能,共计包含49个文件,其中包括32个Java源代码文件、9个XML配置文件、3个Git忽略文件、2个YAML文件、1个Markdown文件、1个JAR包文件以及1...
Java SPI机制详解.md
而SPI机制是Java平台提供的一种灵活的服务发现和加载方式,它促进了模块化开发和插件化的实现,增强了软件的可扩展性。这两个知识点对于Java开发者来说是必不可少的,深入掌握能提高开发效率和代码质量。
SPI机制的核心是`java.util.ServiceLoader`类,它允许我们按照约定在`META-INF/services`目录下创建配置文件,来指定哪些类实现了特定的服务接口。 服务接口定义:在SPI机制中,首先我们需要定义一个服务接口,这个...
除了基本的SPI机制,还可以通过自定义`java.util.ServiceLoader.Provider-Implementation`元数据来控制服务加载行为,或者使用第三方库如Apache Commons Lang的`ClassUtils`进行更复杂的类加载操作。 总之,JDK的...
"深入学习Java中的SPI机制" Java中的SPI(Service Provider Interface)机制是一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用。SPI机制的主要思想是将装配的控制权移到程序...
尽管SPI通信具备诸多优点,例如低成本、易使用、支持全双工通信,并且通信过程中的数据可以一位一位地传输,但SPI通信机制存在明显的缺点,即缺乏数据校验机制、通信过程中没有握手和应答环节。这意味着主端设备无法...
1. SPI机制原理: - 服务接口:首先,定义一个公共的服务接口,例如`Search`,供其他组件使用。 - 服务实现:不同的提供商根据接口提供自己的实现,如`FileSearch`和`DatabaseSearch`。 - 配置文件:在每个提供商...
Java SPI机制实例详解 Java的SPI机制实例详解是Java提供的一种服务提供商接口机制,英文全名为Service Provider Interface。SPI机制实例详解主要是面向厂商或者插件的,普通开发人员可能不熟悉。Java的SPI机制实例...
在这个"spi_spi_SPI验证_"项目中,我们关注的是SPI接口的验证过程,它对于确保SPI设备的正确功能至关重要。SPI验证平台通常是一个综合性的测试环境,用于模拟不同主设备和从设备之间的交互,确保数据传输的准确性和...
这两个函数会处理必要的等待状态,确保数据正确发送或接收,并可能包含错误处理机制。 3. `SPI_TransmitReceive()`函数:同时处理数据的发送和接收,通常通过双数据速率(DDR)模式或者交替读写操作来实现。 4. 可能...
在此,我们将深入探讨SPI接口、DMA机制以及它们如何协同工作以优化LCD显示。 SPI(Serial Peripheral Interface)是一种同步串行接口,广泛用于连接微控制器和各种外围设备,如LCD显示屏。SPI协议通常包括四个信号...
SPI(Serial Peripheral Interface)是一种广泛应用于微控制器和其他设备之间的串行通信接口,它允许设备以全双工模式进行高速数据传输。在FPGA设计中,SPI接口常常被用来与外部设备如传感器、存储器等进行通信。...
### 基于NRF24L01无线SPI通信协议的理解及VC++...通过具体的C语言程序实例,不仅加深了对SPI通信机制的理解,还通过实践检验了通信的正确性。这对于学习嵌入式系统开发和无线通信技术的人来说是非常有帮助的参考资料。