`

Java-SPI机制

    博客分类:
  • java
 
阅读更多

SPI 简介

SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,

 

通过一个简单例子来说明SPI是如何使用的。 首先通过一张图来看看,用SPI需要遵循哪些规范,因为spi毕竟是JDK的一种标准,目前Dubbo框架就基于SPI机制提供扩展功能。


 

SPI 实现



 

1、首先,创建spi接口类

我们首先创建spi接口类,如创建HelloInterface样例接口

package org.bird.spi;

/**
 * @description java spi(Service Provider Interface)样例
 * @author liangjf
 *
 */
public interface HelloInterface {

	/**
	 * 
	 */
	public void sayHello();
}

2、其次,创建spi实现类

我们分别创建spi接口的ImageHello跟TextHello两个不同实现类

package org.bird.spi.impl;

import org.bird.spi.HelloInterface;

public class ImageHello implements HelloInterface {

	public void sayHello() {
		System.out.println("Image Hello.");
	}

}

 

package org.bird.spi.impl;

import org.bird.spi.HelloInterface;

public class TextHello implements HelloInterface {

	public void sayHello() {
		System.out.println("Text Hello.");
	}

}

3、再次,创建meta目录

我们创建META-INFO/services目录,并创建配置文件,文件名字为 接口/抽象类: 全名 文件内容: 接口/抽象类 实现类就像这样:org.bird.spi.HelloInterface



 

4、最后,创建测试程序

我们最后创建一个spi的测试程序,查看一下是否符合我们的预期结果。

package org.bird.spi;

import java.util.ServiceLoader;

public class SPIMain {

	public static void main(String[] args) {
		  ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class);  
		  for(HelloInterface in : loaders) {
			  in.sayHello();
		  }
	}

}

 运行结果如下:

Text Hello.
Image Hello.

 

 

 

 

 

 

  • 大小: 58.2 KB
  • 大小: 27.6 KB
  • 大小: 27.5 KB
分享到:
评论

相关推荐

    Java 基础(8-8)-Java常用机制 - SPI机制详解.pdf

    Java SPI 机制详解 Java SPI(Service Provider Interface)机制是一种服务提供发现机制,能够实现框架的扩展和替换组件,主要被框架的开发人员使用。SPI 机制的核心思想是将装配的控制权移到程序之外,在模块化...

    java-spi学习例子

    Java SPI(Service Provider Interface)是Java平台提供的一种服务发现机制,允许JVM在运行时动态加载服务实现。这个机制使得开发者可以扩展已存在的应用程序或库,而无需修改原代码。SPI的核心理念是将服务接口与其...

    aether-spi-1.11.jar.zip

    SPI(Service Provider Interface)在Java中是一个用于动态发现和加载服务的机制。它允许第三方开发者提供实现特定接口的服务,并在运行时被应用程序自动发现和使用。在Aether中,SPI接口定义了一系列方法,如检索、...

    JAVA-SPI.rar_site:www.pudn.com_spi

    SPI机制的核心在于`java.util.ServiceLoader`类,它是Java平台的标准服务加载器,用于加载符合特定规范的服务实现。 **一、SPI的工作原理** 1. **定义服务接口**:首先,开发者定义一个公共的接口,这个接口定义了...

    arquillian-config-spi.jar.zip

    总的来说,`arquillian-config-spi.jar`是Arquillian框架中的一个重要组成部分,它通过SPI机制实现了配置服务的可扩展性。理解并熟练掌握这一接口,能够帮助开发者更高效地利用Arquillian进行企业级Java应用的测试,...

    aether-spi-1.9.jar.zip

    总结一下,"aether-spi-1.9.jar.zip"是一个包含Aether SPI组件的Java库,版本1.9,它涉及了Java的SPI机制,用于扩展Maven仓库处理功能。开发者可以通过解压文件,然后在项目中引用"aether-spi-1.9.jar"来利用其提供...

    Java SPI 机制(SPI实战+ServiceLoader源码分析+SPI 应用场景+破坏双亲委派)

    Java SPI 机制详解 Java SPI 机制,全称 Service Provider Interface,是 Java 内置的服务发现机制。SPI 机制的主要思想是解耦,通过提供一个标准接口,允许第三方提供实现类,而无需在程序中硬编码。SPI 机制广泛...

    arquillian-container-test-spi.jar.zip

    SPI是一种允许第三方扩展或实现特定服务的机制。在这个JAR包中,包含了用于容器测试的服务接口和抽象类,它们定义了如何与不同的容器进行交互,进行测试生命周期的管理,如启动、停止容器,部署和卸载应用程序等。...

    aether-spi-1.7.jar.zip

    在Java中,SPI机制允许开发者为某个接口提供多种实现,而这些实现可以在运行时被应用程序发现并加载,无需硬编码特定实现的引用。例如,Aether可能使用SPI来让开发者可以自定义仓库解析策略或者插件处理方式。 标签...

    Java类加载及SPI机制.pdf

    而SPI机制则提供了一种通用的方式来扩展Java平台功能,使得Java开发者可以在不修改源码的情况下增强平台或第三方库的功能。在实际开发过程中,深入理解和正确使用这两个机制,对于提升软件的灵活性、可维护性以及可...

    aether-spi.jar.zip

    总结一下,"aether-spi.jar.zip"是一个包含Aether SPI服务提供者接口的Java JAR文件,它是Maven依赖解析机制的一部分,用于处理和管理Java项目的依赖。开发者在使用这个JAR时,需要了解其与Aether库和Maven生态系统...

    aether-spi-0.1-stub.jar.zip

    SPI是Java平台提供的一种机制,允许第三方开发者为特定的接口提供实现。通过在类路径下的特定目录下放置服务提供者的配置文件,应用可以在运行时动态发现并加载这些服务实现。Aether SPI可能是指Aether库中可以被...

    arquillian-spi.jar.zip

    Arquillian SPI的设计基于Java的ServiceLoader机制,这是一个用于加载服务提供者实现的API。通过SPI,Arquillian能够发现并使用插件或适配器,这些插件和适配器可以是针对不同测试容器(如JBoss AS、Tomcat、...

    Java高级玩法-SPI的基本使用

    可以使用Java 提供的SPI机制 什么是SPI?SPI和API的区别 SPI SPI的全称是Service Provider Interface,是Java提供的可用于第三方实现和扩展的机制,通过该机制,我们可以实现解耦,SPI接口方负责定义和提供默认...

    arquillian-test-spi.jar.zip

    Arquillian Test SPI是该框架的一部分,它是扩展Arquillian功能的核心机制,允许开发者创建自定义的测试适配器和服务,以满足特定的测试需求。 1. **Arquillian Test SPI概述**: Arquillian Test SPI提供了一种...

    arquillian-core-spi.jar.zip

    总的来说,Arquillian Core SPI是Java集成测试领域的一个强大工具,它通过SPI机制降低了测试复杂性,提高了测试的可扩展性和灵活性。对于那些需要在多种环境下进行严格测试的项目,Arquillian Core SPI无疑是一个...

    common-spi-4.0.19.SP5.zip

    SPI是Java平台中用于扩展应用程序的一种机制,允许第三方开发者提供实现特定接口的服务,而应用程序可以在运行时动态发现和加载这些服务。 描述 "pjl-comp-filter.zip,他的过滤器可以基于httpservletrequest中的...

    xmljava系统源码-demo-java-spi:jdkspi(服务提供者接口)的简单演示

    demo-java-spi a simple demo for jdk spi(Service Prodiver Interface) ###前提概述 在面向对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了...

    common-spi-4.0.21.Beta3.zip

    在Java世界中,SPI是一种允许应用程序在运行时动态发现和使用服务的机制。它为Java平台提供了一种开放的、可扩展的框架,使得第三方开发者可以为JVM中的核心服务添加新的实现。 【描述】提到的"stream-lib.zip"则是...

    arquillian-drone-spi-1.3.0.Final.zip

    SPI是Java提供的一种服务发现机制,允许第三方开发者扩展已有的软件系统。在这个特定的案例中,arquillian-drone-spi-1.3.0.Final.zip包含的是用于自定义或增强Drone行为的服务接口和实现。 Arquillian Drone的核心...

Global site tag (gtag.js) - Google Analytics