文章目录
一、JNDI与ServiceLoder
JNDI更复。ServiceLoder是个简单实现,更常用。
1.1 JNDI
提供可插拔式的服务—能够扫描目录或者远程类的资源,加载到内存中,并执行。
API
Application Programming Interface
应用程序能够能够使用的接口,用来操作第三方服务SPI
Service Provider Interface
服务提供商,按照一定规范实现服务,然后被解析加载。
一般是分为服务实现
+配置信息
。首先扫描配置信息,然后加载服务实现
,然后被使用
1.2 ServiceLoder
位置
openjdk14
module | package | class |
---|---|---|
java.base | java.util | serviceLoder |
基于SPI思想 jdk自带加载类的方式。分为
服务实现
+配置信息
,通过扫描配置信息
加载服务实现
。用途
用于想不使用依赖,在代码中仅仅使用服务功能的API
,而靠读取目录下的jar包信息,加载业务实现
二、ServiceLoder的SPI
2.1 SPI的基本流程
服务的接口约定
比如解码器,加载一个PNG图片,依赖PNG的解码器。但是开发时仅仅需要定义接口 getEncoder和getDecoder即可。
package com.example;
public interface CodecFactory {
Encoder getEncoder(String encodingName);
Decoder getDecoder(String encodingName);
}
服务实现
PNG解码器真正的实现,实现CodecFactory
,完成对PNG的处理逻辑服务注册
往往需要扫描配置文件
,来获得实现类的信息。所以依赖一个
配置文件com.corn.javalib.PNGCodec
中配置
PNG=com.corn.PNGCodec
服务发现与使用
依赖Service的lode函数,通过扫描配置在指定路径下的配置文件
,加载解码器,实现实现注入
。
ServiceLoader<CodecFactory> loader = ServiceLoader.load(CodecFactory.class);
for (CodecFactory factory