zoukankan      html  css  js  c++  java
  • spring mvc 自定义编辑器

    起始知识:

    Java标准的PropertyEditor的核心功能是将一个字符串转换为一个Java对象,以便根据界面的输入或配置文件中的配置字符串构造出一个JVM内部的java对象。

    如何注册自定义的属性编辑器:

    1、实现PropertyEditor接口或者继承PropertyEditorSupport类

    2、在Spring上下文中声明一个org.springframework.beans.factory.config.CustomEditorConfigurer的bean

    <!--将bean1中的Date赋值2008-08-15,spring会认为2008-08-15是String,无法转换成Date,会报错!-->
    
    <bean id="bean1" class="com.bjsxt.spring.Bean1">      
                 <property name="dateValue">
                           <value>2008-08-15</value>
                 </property>
    </bean>
    <!-- 于是定义属性编辑器 -->      
    <bean id="customEditorConfigurer"           class="org.springframework.beans.factory.config.CustomEditorConfigurer">
               <property name="customEditors">
                     <map>  
                         <entry key="java.util.Date">           
                              <bean class="com.bjsxt.spring.UtilDatePropertyEditor">           
                                  <!--干脆把format也注入,灵活处理格式-->
                                  <property name="format" value="yyyy-MM-dd"/>
                                 </bean>
                         </entry>
                     </map>
               </property>
    </bean>

    但是Java原生的PropertyEditory存在一下不足:

    1、只能用于字符串和java对象的抓换,不适用于任意两个Java类型之间的转换。

    2、对源对象和目标对象上下文信息(如注解,所在宿主类的结构等)不敏感,在类型转换时不能利用这些上下文信息实施高级转换逻辑。

    有鉴于此,Spring 3.0核心模型中添加了一个通用的类型转换模块,类型转换模块位于org.springframework.core.convert中,Spring希望用这个类型转换体系替换Java标准的PropertyEditor。但由于历史原因,会同时支持两者。

    ConversionService

    它是Spring类型转换体系中核心接口,位于org.springframework.core.convert中,也是唯一一个接口。

    可以利用ConversionServiceFactorybean在spring上下文中定义一个ConversionService。该factorybean提供了大量内置的转换器,同时也支持自定义转换器。

    自定义转换器,可选择实现三者中任一种接口:

    • Converter<S,T>
    • GenericConverter
    • ConverterFactory

    Spring mvc在支持新转换器框架同时,也支持JavaBeans的PropertyEditor,可以在控制器中使用@InitBinder添加自定义的编辑器,也可以通过WebBindingInitializer装配在全局范围内使用的编辑器。

    加载顺序

    那么,对于同一个类型对象来说,如果三个地方均配置了,该以哪个为主:

    1、查询通过@Initbinder装配的自定义编辑器。

    2、查询通过ConversionService装配的自定义转换器。

    3、查询通过WebBindingInitializer装配的自定义编辑器。

  • 相关阅读:
    kibana.yml(中文配置详解)
    Elasticsearch之marvel(集群管理、监控)插件安装之后的浏览详解
    ElasticSearch vs Lucene多维度分析对比
    ElasticSearch 应用场景
    ElasticSearch 在Hadoop生态圈的位置
    ElasticSearch 工作原理
    ElasticSearch 架构图
    ElasticSearch vs 关系型数据库
    Codeforces Round #311 (Div. 2)
    uva 568(数学)
  • 原文地址:https://www.cnblogs.com/beiyeren/p/3904529.html
Copyright © 2011-2022 走看看