核心(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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~