在 Java SE 下面有一个不太常见的 ServiceLoader 类 , 它实现了java 中 的spi 机制。 所谓spi ( service provider interface) 就是java se 定义了很多 service 比如 logging, xml parser, jdbc . 这些是所谓的标准, 比如 xml parser, Oracle 会在 rt.jar 中提供一个标准的实现,但是第三方provider 可以提供各自的实现, 这样就需要一个机制去找到相应的实现。 我们都知道 IOC 的思想, 比如spring 我们通过XML 配置来指定具体的实现类。
但是在Java SE 中没有IOC, 它又是怎么实现的呢? 答案就在这个ServiceLoader 类的实现中。
这个类只提供了 三个静态方法 :
1, public static <S> ServiceLoader<S> load(Class<S> service, ClassLoader loader); 采用指定的classLoader 去load 相应的service 实现
2, public static <S> ServiceLoader<S> load(Class<S> service); 采用当前线程的context class loader 去load service
3, public static <S> ServiceLoader<S> loadInstalled(Class<S> service); 这个比较特殊只会load JVM 下面 安装了的 serivce 实现。
class loader 会去找 META-INF/services/ serviceName 的 resource, 找到这个文件 里面就是这个 service 相应实现的class 的类全名称。 当然这个class loader 在找这个 文件的时候遵从 class loader 的查找路径的, 一旦找到就 调用 Class.forName(cn, false, loader);
这个ServiceLoader 还是用的很广泛的, 在比如 nio 的 FileSystems 里面;RMIClassLoader; 还有很多都用到它。
另外很多比如XML parser, JAXB 也都是采用类似这种方式 去找相应的 service factory 实现类工程, 然后调用相应的比如 JAXB 类工厂的 createContext 方法去创建 相应的 service
可以看出这个 ServiceLoader 的作用是大大的。
相关推荐
这个工具在Java平台标准版(Java SE)中被广泛使用,尤其是在实现模块化和插件化系统时。下面将详细探讨`ServiceLoader`的工作原理、使用方法以及它在实际开发中的应用场景。 ### 1. `ServiceLoader`概述 `...
1. **轻量级部署**:通过模块化,可以只包含应用程序所需的部分,而不是整个Java SE库,从而减小应用的体积。 2. **依赖管理**:模块化的引入允许更细粒度的控制依赖关系,避免了“类路径地狱”问题,即多个库之间...
GoF 的《设计模式》是所有面向对象语言(C++ Java C#)的基础,只不过不同的语言将之实现得更方便地使用。 GOF 的设计模式是一座"桥" 就 Java 语言体系来说,GOF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一...
python教程学习
tdac034.pdf
veclibm111111111111
nssm工具,进行2次解压后即可
视讯镜头优化,操作不走
【数据结构】的资源,包括书籍、在线课程和网站
北京大学-DeepSeek系列-提示词工程和落地场景.pdf.png
【财信国际经济研究院-2025研报】2025年2月CPI和PPI数据点评:通胀低于预期,内需亟待提振.pdf
【毕业设计】java-springboot+vue精品在线试题库系统源码(完整前后端+mysql+说明文档+LunW).zip
python安装-25.求 a 的 b 次方——有点不好意思哈.py
代码实现了自适应IMM(交互式多模型)算法,专注于对目标状态进行估计,并结合了匀速(CV)和匀加速(CA)运动模型。它使用自适应观测噪声估计和扩展卡尔曼滤波器(EKF)作为滤波主体,并在最后提供误差统计特性输出。
中产品工业物联网联网的基础功能,是企业开启数字化转型的入门之选。它能帮助企业快速搭建起基础的设备数据采集与监控体系,以较低成本实
北京大学DeepSeek系列-DeepSeek与AIGC应用.pdf.png
【毕业设计-java】springboot-vue基于多维分类的知识管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
## 一、数据介绍 本数据参考C刊《管理评论》佟岩(2024)老师的做法,使用各年度省级政府工作报告中“减碳”关键词的词频总数来测度地方政府对“减碳”的重视程度,“减碳”关键词包括二氧化碳、低碳、减排、节能、能耗、环境保护(环保)、生态、绿色。 本数据包含:原始数据、参考文献、代码do文件、最终结果。 ## 二、参考文献: 佟岩,李鑫,徐国铨.企业集团碳减排压力与债务分布-来自高耗能上市公司的经验证据[J].管理评论,2024,36(02):210-221.DOI:10.14120/j.cnki.cn11-5057/f.2024.02.014 ## 三、相关数据:城市、城市编码、年份、减碳重视程度词频。
python教程学习
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目