①构建一个maven工程

包含如下目录结构:

src/main/java

src/main/resources

src/test/java

src/test/resources

②在src/main/resources目录下新建META-INF/services目录

③在src/main/java中新建包,然后新建一个接口

例如

package com.liu.spi;

public interface IA {
void print();
}

④新建几个实现类

例如:

AIAImpl.java

package com.liu.spi;

public class AIAImpl implements IA {

	public void print() {
System.out.println("AIA");
}
}

BIAImpl.java

package com.liu.spi;

public class BIAImpl implements IA{

	public void print() {
System.out.println("BIA");
}
}

CIAImpl.java

package com.liu.spi;

public class CIAImpl implements IA {

	public void print() {
System.out.println("CIA");
}
}

⑤在src/main/resources/META-INF/services目录下新建一个文件,文件名叫com.liu.spi.IA(接口的全类名)

文件内容为:接口实现类的全类名(必须换行)

com.liu.spi.AIAImpl
com.liu.spi.BIAImpl
com.liu.spi.CIAImpl

注:如需注释,在全类名前用“#”

⑥编写测试类IATest.java

代码如下:

package com.liu.spi;

import java.util.Iterator;
import java.util.ServiceLoader; public class IATest {
public static void main(String[] args) {
ServiceLoader<IA> spiLoader = ServiceLoader.load(IA.class);
Iterator<IA> iaIterator = spiLoader.iterator();
while (iaIterator.hasNext()) {
iaIterator.next().print();
}
}
}

⑦打印结果如下:

Java SPI机制用法demo的更多相关文章

  1. Java SPI机制详解

    Java SPI机制详解 1.什么是SPI? SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.SPI是一种动态替换发现的机制, 比如有个 ...

  2. Java spi机制浅谈

    最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制. 所以简单的总结下java spi机制的思想. 我们系统里抽象的各个模块,往往有很多不同的实现方案,比 ...

  3. JDK源码解析之Java SPI机制

    1. spi 是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件. 系统设计的各个抽象,往往 ...

  4. 聊聊Java SPI机制

    一.Java SPI机制 SPI(Service Provider Interface)是JDK内置的服务发现机制,用在不同模块间通过接口调用服务,避免对具体服务服务接口具体实现类的耦合.比如JDBC ...

  5. Java SPI机制实战详解及源码分析

    背景介绍 提起SPI机制,可能很多人不太熟悉,它是由JDK直接提供的,全称为:Service Provider Interface.而在平时的使用过程中也很少遇到,但如果你阅读一些框架的源码时,会发现 ...

  6. 组件化框架设计之Java SPI机制(三)

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将从深入理解java SPI机制来介绍组件化框架设计: ...

  7. Java SPI 机制实现解耦与本地化

    SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface,可以避免在 Java 代码中写死服务的提供者,而是通过 SPI 服务加载机制进行服务的注册和 ...

  8. java SPI机制

    1. SPI是Service Provider Interfaces的简称.根据Java的SPI规范,我们可以定义一个服务接口,具体的实现由对应的实现者去提供,即Service Provider(服务 ...

  9. Java SPI机制学习笔记

    最近在阅读框架源代码时,常常看到 SPI 的子包, 忍不住查了下: Service Provider Interface : 服务提供接口. JavaSPI 实际上是“基于接口的编程+策略模式+配置文 ...

随机推荐

  1. Spring Boot开发MongoDB应用实践

    本文继续上一篇定时任务中提到的邮件服务,简单讲解Spring Boot中如何使用MongoDB进行应用开发. 上文中提到的这个简易邮件系统大致设计思路如下: 1.发送邮件支持同步和异步发送两种 2.邮 ...

  2. 2017 Gartner数据科学魔力象限出炉,16位上榜公司花落谁家?

    https://www.leiphone.com/news/201703/iZGuGfnER4Sv2zRe.html 2017年Gartner数据科学平台(在2016年被称作“高级分析平台”)的魔力象 ...

  3. macOS High Sierra Terminal巨卡问题的解决

    输入命令特别卡,拖拽窗口也特别卡,想到可能和界面渲染有关系,到设置里面把不透明度调成满值,问题解决. 真正的技术原因是看iOS开发相关的书的时候,书里面有这方面渲染消耗的提示说明.

  4. Error:unsupported class file version 52.0问题的解决

    这个问题主要的原因是依赖包的编译版本比主程序的编译版本高,导致主程序无法正常编译或运行,解决这个问题无非两招: 1.提升主程序的编译器版本,用最新的编译器编译主程序,这样就可以兼容那个依赖包 2.降低 ...

  5. (译)WebRTC实战: STUN, TURN, Signaling

    http://xiaol.me/2014/08/24/webrtc-stun-turn-signaling/ 原文:WebRTC in the real world: STUN, TURN and s ...

  6. Microsoft源代码注释语言(SAL)提供设置批注

    Microsoft源代码注释语言(SAL)提供设置批注可以使用描述的功能如何使用其参数,它对其假设并确保它使其在完成. 批注可标头文件 <sal.h>定义. Visual Studio C ...

  7. thinkphp框架实现删除上传的文件

    public function article_delete(){ $article_id = I('get.article_id'); $model = M('zx_article'); $data ...

  8. Flask入门之结构重组(瘦身)-第13讲笔记

    1. pip list Flask 0.10.1 Flask-Bootstrap 3.3.5.6 Flask-SQLAlchemy 2 Flask-Script 2.0.5 Flask-WTF 0.1 ...

  9. tomcat启动报错:Address already in use: JVM_Bind

    tomcat启动时出现Address already in use: JVM_Bind 的原因是因为端口被占用,有可能是因为多次启动tomcat或者启动了多个tomcat,或者是其他应用程序或者服务占 ...

  10. python:Json模块dumps、loads、dump、load介绍

    由上篇文章(python3+requests:get/post请求)涉及到的json.dumps()扩展 1.json.dumps()用于将dict类型的数据转成str 备注:文件路径前面加上 r 是 ...