zoukankan      html  css  js  c++  java
  • spring的Convert机制

    spring.core包内有Converter接口,方法是T convert(S source);从一个类型转为内容一个类型的实际转化器;converters可能非常多,需要一个注册器来集中管理使用,ConverterRegistry接口担当此任务.ConversionService这个概念将converter的这层概念对上层屏蔽,以服务接口形式,是convert工作更好使用。GenericConversionServcie既是ConversionService也是ConverterRegistry,就有效的整合出了实际可产生作用的服务实现;

    另外:GenericConversionSerivce支持GenericConverter,这个GenericConverter 从Set<ConvertiblePair> getConvertibleTypes();方法可以看出,可以支持多组soureType-->targetType的能力,但是作者自己也一般不要用,直接用简单的Converter就行了(1:1类型转化)。而且spring内部的ObjectToCollectionConverter,ArrayToArrayConverter,都是Generic的,但ConvertiblePairSet长度都是1(即1对1)

    spring.beans包内有一个TypeConverter用来,对jdk的propertEditor的setAsText的场景的spring抽象;

    PropertyEditorRegistrySupport 实现PropertyEditorRegistry接口。也是一个为Bean的property进行处理的创造的概念,基于propery的nested对象路径的结构,来扩展一种叫customEditor(即只特定的属性才生效,比如“user.address.description”,只对desciption进行特殊订定制的(除了满足类型要求外)。).

        beanWrapper,SimpletTypeConverter(他们都是TypeConverter,也是PropertyEditorRegistry)都委托包内部类TypeConverterDelegate来代理"自己作为PropertyEditorRegistrySupport所收集到(持有的)propertyEditor"。这个委托价值,在于它就如何使用conversionService,CustomEditors,defaultEditors进行了定义;

    spring.context中有个DataBinder同样既是TypeConverter,也是PropertyEditorRegistry。 默认最终是委托给BeanWrapper去执行。但它的意义是为validation领域提供了比较容易的概念“数据绑定器”。 DataBinder可以认为是一个壳,只是可以接受外部的配置,最终converter的配置和执行到要让beanWrpaper去坐的。可以立即。

    另外:DataBinder,还整合validation,包括Validator,和Erros(BindingResult)。实际发生数据bind的地方就是是由AbstractPropertyBindResult,中的PropertyAccessor完成的。 validation发生在bind完成的 校验。

      

    
    
  • 相关阅读:
    LeetCode——Generate Parentheses
    LeetCode——Best Time to Buy and Sell Stock IV
    LeetCode——Best Time to Buy and Sell Stock III
    LeetCode——Best Time to Buy and Sell Stock
    LeetCode——Find Minimum in Rotated Sorted Array
    Mahout实现基于用户的协同过滤算法
    使用Java对文件进行解压缩
    LeetCode——Convert Sorted Array to Binary Search Tree
    LeetCode——Missing Number
    LeetCode——Integer to Roman
  • 原文地址:https://www.cnblogs.com/luyi/p/4141220.html
Copyright © 2011-2022 走看看