diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java b/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java index 5b6d2c700..c0193ac4c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/ConverterRegistry.java @@ -32,8 +32,10 @@ import cn.hutool.core.convert.impl.URLConverter; import cn.hutool.core.convert.impl.UUIDConverter; import cn.hutool.core.date.DateTime; import cn.hutool.core.lang.TypeReference; +import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.ServiceLoaderUtil; import cn.hutool.core.util.TypeUtil; import java.io.Serializable; @@ -59,9 +61,11 @@ import java.time.temporal.TemporalAccessor; import java.util.Calendar; import java.util.Collection; import java.util.Currency; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Optional; +import java.util.ServiceLoader; import java.util.TimeZone; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -107,6 +111,22 @@ public class ConverterRegistry implements Serializable{ public ConverterRegistry() { defaultConverter(); + putCustomBySpi(); + + + } + + @SuppressWarnings("rawtypes") + private void putCustomBySpi() { + List list = ServiceLoaderUtil.loadList(Converter.class); + list.forEach(converter->{ + try { + Type type = TypeUtil.getTypeArgument(ClassUtil.getClass(converter)); + putCustom(type, converter); + } catch (Exception e) { + // 忽略注册失败的 + } + }); } /**