Spring通过ConversionService接口对Controller中的参数进行绑定。
对具体的类型转换,Spring定义了三个接口:Converter,GenericConverter,ConverterFactory。
Spring还定义了ConverterRegistry接口用于在ConversionService的实现类中添加和移除Converter。
接口ConfigurableConversionService同时继承了ConversionService和ConverterRegistry接口。
GenericConversionService实现了ConfigurableConversionService接口。可以添加Converter,GenericConverter,ConverterFactory的实现类。为了使用统一的方式转换,本实现类类中为Converter和ConverterFactory的实现类添加了适配器:ConverterAdaptor和ConverterFactoryAdaptor.
Spring引入了Formatter接口(继承自Parser和Printer接口),将格式化字符串转换成特定类型的值或者将值转换成格式化字符串。
为了让注解和Formatter关联起来,Spring定义了AnnotationFormatterFactory<A extends Annotation>接口。
Spring的FormattingConversionService扩展了GenericConversionService实现类,将Parser或Printer转换为一个Converter。
FormattingConversionServiceFactoryBean负责构造FormattingConversionService。可以为它配置Formatter或Converter。它也是Spring MVC中ConversionService的默认实现类。
自定义ConversionService(例子摘自spring-mvc-showcase):
<annotation-driven conversion-service="conversionService">
</annotation-driven>
<beans:bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<beans:property name="formatters">
<beans:bean class="org.springframework.samples.mvc.convert.MaskFormatAnnotationFormatterFactory" />
</beans:property>
</beans:bean>