Spring类型转换器ConversionService

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;
        
    }
}

猜你喜欢

转载自www.cnblogs.com/kjcc/p/12742759.html