最近看dubbo的源代码,发现很多对不同的容器,序列化方式提供了不同的实现,实现的机制是通过
JAVA SPI 来实现的,就是基于接口的服务发现,一个接口不同的实现底层,而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入
package com.ljq.code; public interface JavaSPI { String fromWho(); }
实现:
package com.ljq.code; public class American implements JavaSPI { public String fromWho() { return "FROM American"; } }
实现2:
package com.ljq.code; public class China implements JavaSPI { @Override public String fromWho() { return "from china"; } }
在META-INF/services/下建立一个名称为com.ljq.code.JavaSPI 文件,接口的全限定名称
输入 类的实现全限定名
com.ljq.code.China
客户端调用:
package com.ljq.code; import java.util.Iterator; import java.util.ServiceLoader; public class ClientSPI { public static void main(String[] args) { ServiceLoader<JavaSPI> s = ServiceLoader.load(JavaSPI.class); Iterator<JavaSPI> it = s.iterator(); while (it.hasNext()) { System.out.println("------HELLO------"); JavaSPI spi = it.next(); System.out.println(spi.fromWho()); } } }
相关推荐
Java SPI(Service Provider Interface)是Java平台提供的一种服务发现机制,允许JVM在运行时动态加载服务提供商。这个机制使得开发者可以扩展应用的功能,而无需修改原有代码。SPI的核心概念在于,服务接口由主程序...
Java类加载机制和SPI(ServiceProviderInterface)机制是Java平台中极其重要的两个概念,它们对于Java程序的灵活性和可扩展性起到关键作用。下面详细解释这两个机制的概念、原理和应用场景。 类加载机制是Java...
SPI机制的核心在于`java.util.ServiceLoader`类,它是Java平台的标准服务加载器,用于加载符合特定规范的服务实现。 **一、SPI的工作原理** 1. **定义服务接口**:首先,开发者定义一个公共的接口,这个接口定义了...
《Contexts and Dependency Injection for Java 2.0》(CDI 2.0)是Java开发中的一个核心规范,它提供了上下文管理和依赖注入的功能,旨在简化企业级应用的复杂性,提高代码的可测试性和可维护性。该规范由Antoine ...
本文档是 Java 2 Platform Standard Edition 6.0 的 API 规范。 请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含...
模块的声明、导出、导入以及服务提供者接口(SPI)在规范中有详尽的描述。 五、泛型 泛型是Java中用于提供类型安全的集合操作的重要特性。Java 11规范解释了泛型的声明、类型擦除以及通配符的使用,帮助开发者理解...
7. 服务提供商接口(SPI):规范中还可能包括了服务提供商如何与USIM卡上的Java平台进行交互的接口定义,用于定制化服务和数据交换。 总的来说,《中国联通WCDMA USIM卡Java OTA平台技术规范》是移动通信领域的重要...
SPI(Service Provider Interface)是Java平台中的一个重要特性,它允许JVM在运行时动态加载服务实现。通过SPI机制,开发者可以扩展系统功能,而无需修改核心代码。SPI的核心在于服务接口和服务实现的分离,以及通过...
java.security.spec 提供密钥规范和算法参数规范的类和接口。 java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本...
在开发过程中,理解SPI协议规范、熟悉内核驱动模型以及掌握嵌入式系统硬件知识是至关重要的。 总之,这个压缩包提供的是关于如何在ARM平台上,特别是在Linux环境下,使用SPI接口与SPI-Flash交互并驱动点阵屏的资料...
Aether SPI则是这个库的核心服务接口,它定义了如何与Aether进行交互的规范。 SPI(Service Provider Interface)在Java中是一个用于动态发现和加载服务的机制。它允许第三方开发者提供实现特定接口的服务,并在...
SPI,全称Service Provider Interface,是Java平台提供的一种服务发现和动态加载的机制。它允许JVM在运行时动态地查找并加载实现特定接口的服务提供商。这种机制在Java生态系统中广泛应用,比如数据库驱动、日志框架...
javaee 6 规范 chm版本 第1章 引言 1.1 感谢 1.2 版本1.3的感谢 1.3 版本1.4的感谢 ...13.1 JNLP(Java Web Start) 13.2 Java EE SPI 附录 附录A 早期版本的部署描述符 附录B 修订历史 科瑞网酷
java.security.spec 提供密钥规范和算法参数规范的类和接口。 java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本...
1. **定义接口**:在SPI机制中,首先要有一个接口,这个接口定义了服务的规范。例如,我们可以创建一个名为`Multiplier`的接口,里面包含一个`multiply`方法用于执行乘法运算。 ```java public interface ...
SPI(Service Provider Interface)是Java平台中的一个标准接口,它允许在运行时动态发现和加载服务实现。SPI机制使得开发者可以扩展程序的功能,而无需修改原有代码,增强了软件的可扩展性和灵活性。在这个名为"spi...
SPI(Service Provider Interface)是Java提供的一种服务发现机制,它允许第三方开发者为Java应用程序扩展服务。这个机制在Java中主要由`java.util.ServiceLoader`类来实现。在本示例中,我们将探讨如何创建一个简单...
java.security.spec 提供密钥规范和算法参数规范的类和接口。 java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理...
java.security.spec 提供密钥规范和算法参数规范的类和接口。 java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理...