吃透Spring源码(七):自定义类型转换器
一,ConversionService转换服务
一般来说,用户可以使⽤用内置的或者⾃己实现Converter接⼝来实现类型转换,ConversionService类接口内部调用Converter接口实现类来实现类型转换。

1,ConversionService接口
类型转换的服务接口,这是转换系统的入口,调用convert(Object, Class)进行一次线程安全的类型转换。
public interface ConversionService {
// 判断能否进行类型转换
boolean canConvert(@Nullable Class<?> sourceType, Class<?> targetType);
boolean canConvert(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType);
// 类型转换,获取合适的转换器进行类型的转换,默认是DefaultConversionService,也可以是自定义的
@Nullable
<T> T convert(@Nullable Object source, Class<T> targetType);
@Nullable
Object convert(@Nullable Object source, @Nullable TypeDescriptor sourceType, TypeDescriptor targetType);
}
2,ConverterRegistry接口
对转换器进行注册(完成类型转换器的增删操作):
public interface ConverterRegistry {
// 添加转换器
void addConverter(Converter<?, ?> converter);
<S, T> void addConverter(Class<S> sourceType, Class<T> targetType, Converter<? super S, ? extends T> converter);
void addConverter(GenericConverter converter);
// 增加转换器的工厂类
void addConverterFactory(ConverterFactory<?, ?> factory);
// 移除转换器
void removeConvertible(Class<?> sourceType, Class<?> targetType);
}