Class ListServiceLoader<S>

java.lang.Object
org.miaixz.bus.core.lang.loader.spi.AbstractServiceLoader<S>
org.miaixz.bus.core.lang.loader.spi.ListServiceLoader<S>
Type Parameters:
S - 服务类型
All Implemented Interfaces:
Iterable<S>, ServiceLoader<S>

public class ListServiceLoader<S> extends AbstractServiceLoader<S>
列表类型的服务加载器,用于替换JDK提供的ServiceLoader 相比JDK,增加了:
  • 可选服务存储位置(默认位于META-INF/services/)。
  • 可自定义编码。
  • 可自定义加载指定的服务实例。
  • 可自定义加载指定的服务类,由用户决定如何实例化(如传入自定义构造参数等)。
  • 提供更加灵活的服务加载机制,当选择加载指定服务时,其它服务无需加载。

服务文件默认位于"META-INF/services/"下,文件名为服务接口类全名。内容类似于:

     # 我是注释
     service.Service1
     service.Service2
 
通过调用getService(int)方法,传入序号,即可获取对应服务。
Since:
Java 17+
Author:
Kimi Liu
  • 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

      public static <S> ListServiceLoader<S> of(Class<S> serviceClass)
      构建KVServiceLoader
      Type Parameters:
      S - 服务类型
      Parameters:
      serviceClass - 服务名称
      Returns:
      KVServiceLoader
    • of

      public static <S> ListServiceLoader<S> of(Class<S> serviceClass, ClassLoader classLoader)
      构建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

      public List<String> getServiceNames()
      Description copied from interface: ServiceLoader
      获取服务名称列表
      Returns:
      服务名称列表
    • getServiceClass

      public Class<S> getServiceClass(int index)
      获取指定服务的实现类
      Parameters:
      index - 服务名称
      Returns:
      服务名称对应的实现类
    • getServiceClass

      public Class<S> getServiceClass(String serviceName)
      Description copied from interface: ServiceLoader
      获取指定服务的实现类
      Parameters:
      serviceName - 服务名称
      Returns:
      服务名称对应的实现类
    • getService

      public S getService(int index)
      获取指定序号对应的服务,使用缓存,多次调用只返回相同的服务对象
      Parameters:
      index - 服务名称
      Returns:
      服务对象
    • getService

      public S getService(String serviceName)
      Description copied from interface: ServiceLoader
      获取指定名称对应的服务
      Parameters:
      serviceName - 服务名称
      Returns:
      服务对象
    • iterator

      public Iterator<S> iterator()