添加spi加载自定义转换方法

This commit is contained in:
hzd 2020-09-03 15:49:01 +08:00
parent 80239e2f27
commit 1f57bff2c0

View File

@ -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<Converter> list = ServiceLoaderUtil.loadList(Converter.class);
list.forEach(converter->{
try {
Type type = TypeUtil.getTypeArgument(ClassUtil.getClass(converter));
putCustom(type, converter);
} catch (Exception e) {
// 忽略注册失败的
}
});
}
/**