- 看到公司的项目代码中,在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机制.pdf
Java SPI 机制(SPI实战+ServiceLoader源码分析+SPI 应用场景+破坏双亲委派)
Java SPI机制详解.md
Java类加载及SPI机制
Java 基础(8-8)-Java常用机制 - SPI机制详解
本文通过对嵌入式系统中的SPI通信机制的研究与分析,设计了一种高可靠性的SPI通信机制。这种SPI通信机制的高可靠性通过系统长期的现场应用得到了验证。
浅谈基于NRF24L01无线SPI通信协议的理解及VC,通过实际C程序,拿实践去辅助理解
采用jdk自带的spi实现spi(service provider interface)
主要介绍了深入学习Java中的SPI机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java SPI机制原理及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
SPI抛光规范(SPI A1-SPI D3)
dubbo spi可扩展机制源码解析
spi协议详解spi协议详解spi协spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议...
一款基于hdfs的ftp服务器,通过java的spi机制内置支持多hadoop版本,自带依赖,无需编译即可使用。
SPI库函数配置中,结构体成员有SPI_NSS这个东西,这个东西是什么意思,当时看着是不知所云。 经过不断查找资料得出以下答案: 软件模式: SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 硬件模式 SPI_InitStructure....
引言 串行接口已成为当前传输接口的发展趋势,原因在于串行的高速率传输性能和较简单的线路连接。在已知的外围器件连接端口中,有USB,wishbone和并行端口。其中SPI接口总线基于串行传输的... SPI目前有3种规格SPI
SPI 自收自发功能,SPI1 主模式 SPI2 从模式的,通信功能验证OK
主要介绍了Java的SPI机制实例详解的相关资料,需要的朋友可以参考下