核心(Hutool-core)工具类(SPI加载工具-ServiceLoaderUtil)

介绍
SPI(Service Provider Interface),是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。

更多介绍见:https://www.jianshu.com/p/3a3edbcd8f24

使用

定义一个接口:

package cn.hutool.test.spi;

public interface SPIService {
void execute();
}
有两个实现:

package cn.hutool.test.spi;

public class SpiImpl1 implements SPIService{
public void execute() {
Console.log("SpiImpl1.execute()");
}
}
package cn.hutool.test.spi;

public class SpiImpl2 implements SPIService{
public void execute() {
Console.log("SpiImpl2.execute()");
}
}
然后在classpath的META-INF/services下创建一个文件,叫cn.hutool.test.spi.SPIService,内容为:

cn.hutool.test.spi.SpiImpl1
cn.hutool.test.spi.SpiImpl2
加载第一个可用服务,如果用户定义了多个接口实现类,只获取第一个不报错的服务。这个方法多用于同一接口多种实现的自动甄别加载, 通过判断jar是否引入,自动找到实现类。

SPIService service = ServiceLoaderUtil.loadFirstAvailable(SPIService.class);
service.execute();

posted @ 2024-06-14 17:49  vello  阅读(62)  评论(0)    收藏  举报