diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ServiceLoaderUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ServiceLoaderUtil.java index 21086f5f9..4fd3360bb 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ServiceLoaderUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ServiceLoaderUtil.java @@ -1,6 +1,8 @@ package cn.hutool.core.util; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import java.util.ServiceConfigurationError; import java.util.ServiceLoader; @@ -61,7 +63,7 @@ public class ServiceLoaderUtil { * @return 服务接口实现列表 */ public static ServiceLoader load(Class clazz) { - return ServiceLoader.load(clazz); + return load(clazz,null); } /** @@ -73,6 +75,37 @@ public class ServiceLoaderUtil { * @return 服务接口实现列表 */ public static ServiceLoader load(Class clazz, ClassLoader loader) { + if(loader==null) { + loader = Thread.currentThread().getContextClassLoader(); + } return ServiceLoader.load(clazz, loader); } + /** + * 加载服务 并已list列表返回 + * @param 接口类型 + * @param clazz 服务接口 + * @return 服务接口实现列表 + */ + public static List loadList(Class clazz){ + return loadList(clazz); + } + /** + * 加载服务 并已list列表返回 + * @param 接口类型 + * @param clazz 服务接口 + * @param loader {@link ClassLoader} + * @return 服务接口实现列表 + */ + public static List loadList(Class clazz, ClassLoader loader){ + final Iterator iterator = load(clazz).iterator(); + List list=new ArrayList<>(); + while(iterator.hasNext()){ + try { + list.add(iterator.next()); + } catch (ServiceConfigurationError e) { + // ignore + } + } + return list; + } }