public class ServiceLoaderUtil extends Object
1、创建接口,并创建实现类
2、ClassPath/META-INF/services下创建与接口全限定类名相同的文件
3、文件内容填写实现类的全限定类名
相关介绍见:https://www.jianshu.com/p/3a3edbcd8f24| Constructor and Description |
|---|
ServiceLoaderUtil() |
| Modifier and Type | Method and Description |
|---|---|
static <T> ServiceLoader<T> |
load(Class<T> clazz)
加载服务
|
static <T> ServiceLoader<T> |
load(Class<T> clazz,
ClassLoader loader)
加载服务
|
static <T> T |
loadFirst(Class<T> clazz)
加载第一个服务,如果用户定义了多个接口实现类,只获取第一个。
|
static <T> T |
loadFirstAvailable(Class<T> clazz)
加载第一个可用的 Service 实现。
|
static <T> List<T> |
loadList(Class<T> clazz)
加载服务 并已list列表返回
|
static <T> List<T> |
loadList(Class<T> clazz,
ClassLoader loader)
加载服务 并已list列表返回
|
public static <T> T loadFirstAvailable(Class<T> clazz)
为兼容 JDK 24+ 中 ServiceLoader 在加载服务实现时可能抛出的 NoClassDefFoundError,
此方法在调用 hasNext() 和 next() 时安全忽略异常。
当遇到依赖缺失或配置错误的实现时会自动跳过,并返回第一个可用的非空实例。
T - 服务实现类型clazz - 服务接口类型nullpublic static <T> T loadFirst(Class<T> clazz)
T - 接口类型clazz - 服务接口nullpublic static <T> ServiceLoader<T> load(Class<T> clazz)
T - 接口类型clazz - 服务接口public static <T> ServiceLoader<T> load(Class<T> clazz, ClassLoader loader)
T - 接口类型clazz - 服务接口loader - ClassLoaderpublic static <T> List<T> loadList(Class<T> clazz)
T - 接口类型clazz - 服务接口public static <T> List<T> loadList(Class<T> clazz, ClassLoader loader)
T - 接口类型clazz - 服务接口loader - ClassLoaderCopyright © 2025. All rights reserved.