ServiceLoader加载基于配置的类服务

Java SPI的简单使用 SPI的全称是Service Provider Interface,起初数提供给厂商做插件开发的。关于Java SPI的详细定义和说明,可查看官网说明。 Java SPI使用了策略模式,一个接口多种实现。其只定义接口,具体的实现并不在程序中直接确定,而是由程序之外的配置掌控,用于具体实现的装配。具体的步骤如下: 定义一个接口以及对应的方法。 编写该接口的一个实现类。 在META-INF/services/目录下,创建一个以接口全路径命名的文件,如com.jackson.dubbo.spi.Print 阅读详情

    Java中有一个ServiceLoader类,可以用来加载指定的类服务。Java中目前还没有简单的办法来获取指定接口子类的列表。ServiceLoader能够在一定程度上,根据配置,加载并实例化指定接口的子类。

 

1、声明Service:在META-INF/services目录下创建配置文件,文件名称为Super类或者接口全名称,文件的内容每一行为一个子类全名,这个文件必须放在META-INF/services目录下,而且文件的名称也需要符合上述要求。比如我希望使用ServerLoader加载“com.demo.Test”接口(或者类)的子类,那么我就需要在META-INF/services目录下,创建一个文件名称为“com.demo.Test”的文件,文件的内容为2个子类的名称:

com.demo.Test1
com.demo.Test2

    注意Test1和Test2必须实现(或继承)Test接口,且它们必须有默认构造函数。

 

2、代码示例

ServiceLoader<Test> loader = ServiceLoader.load(Test.class);
for(Test test : loader) {
	System.out.println(test.getClass().getName());
}

    ServiceLoader本身实现了Iterable接口,load方法指定父类名称,那么它就会根据父类的类名在META-INF/services目录下查找同名的文件,并依次加载和实例化指定的类列表。此后我们就可以遍历ServiceLoader获取实例列表。

 

    ServiceLoader在某些场景下,非常有用,以配置化的方式指定service列表,并在系统运行时加载。

Java : ServiceLoader详解 1.美图 2.概述 ServiceLoader与ClassLoader是Java中2个即相互区别又相互联系的加载器.JVM利用ClassLoader将类载入内存,这是一个类声明周期的第一步(一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直接被使用的情况)。 那ServiceLoader又是什么呢? ServiceLoader... 阅读详情

相关推荐

java.util.ServiceLoader demo

NULL 博文链接:https://wen866595.iteye.com/blog/1541386

详解ServiceLoader如何将class path下服务实现类加载到jvm

ServiceLoader源码分析和SPI总结 ????​:最近两天通过阅读了一些源码和java doc对JVM有了粗浅的认识,特此做个知识记录! ????介绍这个问题之前一定要对SPI知识有所了解! SPI介绍 0. 问题引入 1、拿我们的JDBC来引入问题,我们在自己的应用程序中如果要使用到数据库,我们只需要将该数据库的驱动jar包引入到应用的classpath下,然后在项目中使用Class.forNam...

wenpan的博客 3096

基于ESP32的摩托车蓝牙对讲系统开发实践

蓝牙音频传输技术在现代通信中扮演着重要角色,其核心原理是通过无线射频实现数字音频信号的双向传输。在工程实践中,蓝牙HFP协议常用于语音通信场景,而ESP32等嵌入式平台因其低成本和高集成度成为DIY项目的理想选择。本项目通过ESP32-WROOM-32D开发板结合PCM5102 DAC和INMP441数字麦克风等模块,构建了一套摩托车骑行专用的蓝牙对讲系统。该系统特别针对高速移动环境下的风噪抑制和连接稳定性进行了优化,采用数字信号处理技术实现实时降噪,并通过I2S接口确保音频质量。这种方案不仅成本控制在30

weixin_33239721的博客 414

b java 之 serviceLoader详解 & serviceLoader.load(XXX.class)

—> go to 总目录 文章目录一、JNDI与ServiceLoder1.1 JNDI1.2 ServiceLoder二、ServiceLoder的SPI2.1 SPI的基本流程2.2 使用示例三、源码解析3.1 Iterable 接口3.2 内部类provider3.3 核心方法Load3.3.1 static ServiceLoader load(Class service, ClassLoader loader, Module callerModule)3.3.2 static Servi

wanxiaoderen的博客 8156

Jenkins插件下载慢?3分钟搞定国内镜像加速(含华为/腾讯/清华源对比)

本文详细介绍了如何通过国内镜像源加速Jenkins插件下载,包括华为云、腾讯云和清华源等主流镜像站的性能对比及一键配置方案。通过实测数据展示华为云镜像站表现最佳,下载速度达19.4MB/s,并提供sed命令、管理界面配置和Docker定制三种高效加速方案,帮助开发者快速解决插件下载慢的问题。

sql99的博客 320

深度学习初探 - 入门 DL 主流框架

这个课程主要是引导大家入门TensorFlow、Theano、Keras 及 Caffe 几个主流的深度学习框架。在课程中有关各种算法的详细推导及思想我们不会做过多的陈诉,旨在通过让同学们动手操作搭建自己的神经网络模型,了解如何使用这些框架解决实际问题。课程会基于每个框架的官方文档,先带大家熟悉框架中基本的定义语法及常用函数(可看成深度模型的小零件),每个实验最后都会综合这些零件搭建一个简易的神经深度网络模型。这个项目十分适合具有一定python编程基础,对人工智能、深度学习感兴趣的同学。Theano。

2401_86435672的博客 1235

java用来模块化开发和扩展很有用的服务加载器 ServiceLoader类实现SPI机制

`java.util.ServiceLoader` 是Java中用于实现服务提供者接口(Service Provider Interface, SPI)机制的一个工具。SPI允许你在不修改现有代码的情况下,动态地加载和使用第三方实现。这在插件化设计、模块化开发和扩展性需求中非常有用。

爱的叹息的专栏 635

哨兵2号遥感影像解析全流程:步骤、算法与AI应用详解

未来,多源数据融合与边缘计算技术的应用将进一步拓展遥感解析的边界。波段合成:选择10m分辨率波段(如B2、B3、B4、B8)进行Layer Stacking,生成多光谱影像。| 分类与识别 | Scikit-Learn、PyTorch | SVM、CNN、K-Means聚类 | 地块分类、目标检测 || 数据预处理 | SNAP、Sen2Cor | 大气校正、几何校正 | L2A产品生成、格式转换 || 波段融合 | ENVI、GDAL | Layer Stacking、重采样 | 多光谱影像合成 |

zhz5214的博客 2711

serviceloader java_Java之ServiceLoader

JDK1.6之后,java.util包下多了一个类ServiceLoader,其实现了Iterable接口(可以直接进行for-each loop)。这个类的主要作用是提供了一种服务发现机制,并没有什么深奥的内容。实现过程也十分简单,下面通过一个例子来详细讲解一下如何使用和其实现过程。本文基于jdk1.8。2.例子ServiceLoader的使用是要在根目录有一个文件夹META-INF/servi...

weixin_35252187的博客 1652

MFC属性网格控件(CMFCPropertyGridCtrl)完全指南:构建专业属性编辑界面

本文详细介绍了MFC中的CMFCPropertyGridCtrl控件的使用方法。主要内容包括:控件基础用法(初始化、添加属性、事件处理)、高级设置(自定义外观、创建属性类型、动态更新)、派生类实现(自定义绘制、搜索过滤功能)、界面集成技巧(对话框布局、属性编辑器)以及实际应用示例。文章重点讲解了如何通过继承和自定义实现复杂功能,并提供了性能优化、多语言支持等最佳实践方案。该控件适用于需要大量参数配置的应用程序,能够创建类似Visual Studio属性窗口的专业界面。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 154

如何解除Uniaccess管控??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2388

浅析JDK中ServiceLoader的源码

紧接着上一篇《通过源码浅析JDK中的资源加载》,ServiceLoader是SPI(Service Provider Interface)中的服务类加载的核心类,也就是,这篇文章先介绍ServiceLoader的使用方式,再分析它的源码。这里先列举一个经典的例子,MySQL的Java驱动就是通过ServiceLoader加载的,先引入的依赖: 查看这个依赖的源码包下的META-INF目录,可见:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BuV1i3Em-165521023

Throwable 520

全面指南:PyTorch与ROCm版本兼容性及多版本环境管理

本文详细介绍了在AMD GPU上配置PyTorch开发环境的完整流程,重点解决版本兼容性和多版本ROCm环境管理问题。主要内容包括:1) PyTorch与ROCm版本对应关系查询;2) 四种查看ROCm版本的方法;3) 使用update-alternatives管理多版本ROCm;4) 环境变量配置与冲突解决方案;5) 完整的验证流程和性能测试方法。文章提供了最佳实践建议和故障排除清单,帮助开发者快速搭建稳定高效的深度学习开发环境,充分发挥AMD GPU硬件性能。通过系统化的验证流程确保各组件协同工作,解决

数字人生 606

ServiceLoader的实用

简单的介绍:public final class ServiceLoaderextends Object implements Iterator一个简单的服务提供者加载设施用于从配置文件中加载子类或者接口的实现类 主要是从META-INF/service这个目录中的配置文件,读取文件的内容,然后加载给定接口或者基类的相关的实现 具体的工作流程:ServiceLoader会根据给定的类的全名称(

qingmuluoyang的博客 376

PCL 法向量夹角剔除错误匹配点对【2026最新版】

实现了一种简单的基于对应点法线角度的对应关系去除方法。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 41万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java spi_Java SPI(服务提供商接口)和ServiceLoader

java spiJava SPI (Service Provider Interface) is the mechanism to load services dynamically. We can implement Java SPI in our application by following the specific set of rules and load the services ...

从零开始的教程世界 434

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JDBC DriverManager驱动加载与SPI ServiceLoader

SPI JDBC 驱动加载

weixin_42713970的博客 577

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

corejava11(6.4 服务装载机)

6.4 服务装载机 有时,您使用服务体系结构开发应用程序。有些平台鼓励使用这种方法,例如OSGi(http://osgi.org),它用于开发环境、应用程序服务器和其他复杂的应用程序。这样的平台远远超出了本书的范围,但是JDK还提供了一个加载服务的简单机制,我们在这里描述。Java平台模块系统很好地支持了这个机制,参见第二卷第9章。 通常,在提供服务时,程序希望给服务设计者一些自由,让他们知道如何...

nbda1121440的专栏 236

Java SPI实现:ServiceLoader 的使用

SPI 释义 在Java中,SPI其实可以理解为一个接口规范,有点类似于你电脑的外设,以鼠标举例。电脑制造商只给你提供一个鼠标的插口,至于鼠标是什么牌子,什么形状,电脑不关心,只要鼠标能够满足接口规范就行了。SPI英文全程 Service Provider Interface,即服务提供的接口,其实就是基于Java接口服务的一种服务扩展机制而已,可以用来替换框架中的扩展和组件,如下图: SPI 在Java中的实现(tip: 如果不明白实现,直接看使用示例就明白怎么玩了。) Java 为解决 S

良木 1667

java SPI 01-SPI 是什么?spi 使用入门教程 ServiceLoader 使用简介

系列目录 spi 01-spi 是什么?入门使用 spi 02-spi 的实战解决 slf4j 包冲突问题 spi 03-spi jdk 实现源码解析 spi 04-spi dubbo 实现源码解析 spi 05-dubbo adaptive extension 自适应拓展 spi 06-自己从零手写实现 SPI 框架 spi 07-自动生成 SPI 配置文件实现方式 问题引入 以前一直想指定一套标准,让别人按照这个标准来实现,并编写好对应的容器。 然后我在代码中动态获取这些实现,让代码运行起来。 困难 如

1万+

java provider_Java SPI(Service Provider Interface)

//ServiceLoader实现了Iterable接口,可以遍历所有的服务实现者public final class ServiceLoaderimplements Iterable{//查找配置文件的目录private static final String PREFIX = "META-INF/services/";//表示要被加载的服务的类或接口private final Classser...

weixin_32613887的博客 191

Hello ServiceLoader

[b]ServiceLoader 类 [/b] Java SE 6 平台提供一个新的 API,可以帮助您查找、加载和使用服务提供程序。从 Java 平台的 1.3 版本开始, java.util.ServiceLoader 类就已经悄悄存在了,但它在 Java SE 6 中已经成为了一个公共 API。 ServiceLoader 类用于在应用程序的类路径或运行时环境的扩展目录中搜索...

xiongmimi的博客 162

SPI(Service Provider Interface)

实现类的类名写在配置文件中,ServiceLoader.load 获取类名,加载所需的类,创建类的对象,将对象转型为Service.class(来自方法参数传的 接口类型)Java SPI (Service Provider Interface) 是一种标准的服务发现机制,它允许 java 应用程序在运行时扩展第三方库的功能。配置文件的路径约定为 META-INF/services/ 接口完整类名。main(该工程依赖于接口和实现类所在的2个工程)其中包含了接口的2种实现类的对象。接口 Service。

weixin_41812346的博客 118

Skywalking-12:Skywalking SPI机制

SPI机制 基本概述 SPI 全称 Service Provider Interface ,是一种服务发现机制。通过提供接口、预定义的加载器( Loader )以及约定俗称的配置(一般在 META-INF 目录下),可以实现动态加载服务实现类。 类图 通过类图可以分析出, ServiceLoader 实现了 Iterable 接口,提供了迭代的功能。 而 ServiceLoader 将迭代的实现委托给 LazyIterator 。 LazyIterator 提供了延时迭代的能力,当有需要的时候,才去加

Switch的博客 697
上一篇: YARN指令[官网整理]
下一篇: JAVA中try-catch异常逃逸
shift_alt_ctrl
博客等级 码龄10年 0粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值