Converter上篇已介绍(此文不做解释)
一、ConversionService
实现这个接口可以调用自己的Converter,ConversionService接口里面定义了两个canConvert方法和两个convert方法,canConvert方法用于判断当前的ConversionService是否能够对原类型和目标类型进行转换, convert方法则是用于进行类型转换的。TypeDescriptor是对于一种类型的封装,里面包含该种类型的值、实际类型等等信
public interface ConversionService { boolean canConvert(@Nullable Class<?> sourceType, Class<?> targetType); boolean canConvert(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType); @Nullable <T> T convert(@Nullable Object source, Class<T> targetType); @Nullable Object convert(@Nullable Object source, @Nullable TypeDescriptor sourceType, TypeDescriptor targetType); }
SpringMVC需要进行类型转换的时候就会调用ConversionService(实现类)的canConvert和convert方法进行类型转换。
二、ConverterRegistry
一般写好Converter之后需要注册到spring容器中,所以这个接口功能就是管理Converter,提供了三个addConverter分别添加Conveter(一对一的转换)、GenericConverter(多对多的转换)、、 ConverterFactory(一对多的转换)、
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); }
三、上面两个接口提供好之后,Spring 提供了一个实现类GenericConversionService实现类这两个接口
四、 GenericConversionService、DefaultConversionService的使用,就是把自己定义的Converter添加到spring容器中。以DefaultConversionService为列,AddressConverter自定义的类型转换器
@Configuration public class WebConfiguration { @Bean public GenericConversionService getDefaultConversionService(@Autowired GenericConversionService conversionService) { conversionService.addConverter(new AddressConverter()); System.out.println("类型转换已加入!"); return conversionService; } }