Class ListServiceLoader<S>
java.lang.Object
org.miaixz.bus.core.lang.loader.spi.AbsServiceLoader<S>
org.miaixz.bus.core.lang.loader.spi.ListServiceLoader<S>
- Type Parameters:
S- 服务类型
- All Implemented Interfaces:
Iterable<S>,ServiceLoader<S>
列表类型的服务加载器,用于替换JDK提供的
ServiceLoader
相比JDK,增加了:
- 可选服务存储位置(默认位于META-INF/services/)。
- 可自定义编码。
- 可自定义加载指定的服务实例。
- 可自定义加载指定的服务类,由用户决定如何实例化(如传入自定义构造参数等)。
- 提供更加灵活的服务加载机制,当选择加载指定服务时,其它服务无需加载。
服务文件默认位于"META-INF/services/"下,文件名为服务接口类全名。内容类似于:
# 我是注释
service.Service1
service.Service2
通过调用getService(int)方法,传入序号,即可获取对应服务。- Since:
- Java 17+
- Author:
- Kimi Liu
-
Field Summary
Fields inherited from class org.miaixz.bus.core.lang.loader.spi.AbsServiceLoader
charset, classLoader, pathPrefix, serviceClass -
Constructor Summary
ConstructorsConstructorDescriptionListServiceLoader(String pathPrefix, Class<S> serviceClass, ClassLoader classLoader, Charset charset) 构造 -
Method Summary
Modifier and TypeMethodDescriptiongetService(int index) 获取指定序号对应的服务,使用缓存,多次调用只返回相同的服务对象getService(String serviceName) 获取指定名称对应的服务getServiceClass(int index) 获取指定服务的实现类getServiceClass(String serviceName) 获取指定服务的实现类获取服务名称列表iterator()voidload()加载服务static <S> ListServiceLoader<S> 构建KVServiceLoaderstatic <S> ListServiceLoader<S> of(Class<S> serviceClass, ClassLoader classLoader) 构建KVServiceLoaderstatic <S> ListServiceLoader<S> of(String pathPrefix, Class<S> serviceClass, ClassLoader classLoader) 构建KVServiceLoaderintsize()服务总数Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliterator
-
Constructor Details
-
ListServiceLoader
public ListServiceLoader(String pathPrefix, Class<S> serviceClass, ClassLoader classLoader, Charset charset) 构造- Parameters:
pathPrefix- 路径前缀serviceClass- 服务名称classLoader- 自定义类加载器,null表示使用默认当前的类加载器charset- 编码,默认UTF-8
-
-
Method Details
-
of
构建KVServiceLoader- Type Parameters:
S- 服务类型- Parameters:
serviceClass- 服务名称- Returns:
- KVServiceLoader
-
of
构建KVServiceLoader- Type Parameters:
S- 服务类型- Parameters:
serviceClass- 服务名称classLoader- 自定义类加载器,null表示使用默认当前的类加载器- Returns:
- KVServiceLoader
-
of
public static <S> ListServiceLoader<S> of(String pathPrefix, Class<S> serviceClass, ClassLoader classLoader) 构建KVServiceLoader- Type Parameters:
S- 服务类型- Parameters:
pathPrefix- 路径前缀serviceClass- 服务名称classLoader- 自定义类加载器,null表示使用默认当前的类加载器- Returns:
- KVServiceLoader
-
load
public void load()Description copied from interface:ServiceLoader加载服务 -
size
public int size()Description copied from interface:ServiceLoader服务总数- Returns:
- 总数
-
getServiceNames
Description copied from interface:ServiceLoader获取服务名称列表- Returns:
- 服务名称列表
-
getServiceClass
获取指定服务的实现类- Parameters:
index- 服务名称- Returns:
- 服务名称对应的实现类
-
getServiceClass
Description copied from interface:ServiceLoader获取指定服务的实现类- Parameters:
serviceName- 服务名称- Returns:
- 服务名称对应的实现类
-
getService
获取指定序号对应的服务,使用缓存,多次调用只返回相同的服务对象- Parameters:
index- 服务名称- Returns:
- 服务对象
-
getService
Description copied from interface:ServiceLoader获取指定名称对应的服务- Parameters:
serviceName- 服务名称- Returns:
- 服务对象
-
iterator
-