起始知识:

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装配的自定义编辑器。

spring mvc 自定义编辑器的更多相关文章

  1. Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志

    在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法), 发现出现异常时,log4j无法在控制台输出错误日志.因此需要自定义 ...

  2. spring mvc 自定义Handlermapping

    上次大概写了个可以解决velocity 多视图的东西. 但是实际运用过程中又到处找了些资料看了下.这里 小计下: DispatcherServlet解析过程: ..1..HandlerMapping. ...

  3. spring mvc 自定义转换器

    <!-- 注册转化器 --> <mvc:annotation-driven conversion-service="conversionService" /> ...

  4. spring mvc自定义注解--登录时密码加密注解

    1,定义注解名称接口 /** * 使用该注解不用再MD5转换了 * * @author adonis * */ @Target(ElementType.PARAMETER) @Retention(Re ...

  5. Spring MVC 自定义类型转换器

    新建一个自定义转换器 import org.springframework.core.convert.converter.Converter; import org.springframework.s ...

  6. spring mvc --自定义converse

    在MVC中我们可以很轻松的根据项目需求进行必要的信息转换,如设置默认的日期格式,自定义String类型的格式等等... 配置中我们需要自定义converseService: <bean id=& ...

  7. Spring MVC自定义403,404,500状态码返回页面

    代码 HTTP状态码干货:http://tool.oschina.net/commons?type=5 import org.springframework.boot.web.servlet.erro ...

  8. spring mvc自定义注解--访问时验证

    作用:在访问controller的方法时,判断用户是否是登陆状态. step1:定义注解 import java.lang.annotation.ElementType; import java.la ...

  9. spring mvc 自定义handler不拦截静态资源

    处理静态资源的handler和处理Controller请求中的handler不同,对应的Interceptor也不同 查找对应handler是在DispatcherServlet中 因此一些自定义的I ...

随机推荐

  1. Luogu4897 【模板】最小割树

    没事干写一发模板. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib& ...

  2. 【bzoj4004】装备购买

    Portal-->bzoj4004 Solution 这题的话..其实就是求\(n\)个\(m\)维向量的极大线性无关组,并且要求权值最大 然后套路什么的跟Portal-->bzoj310 ...

  3. 在github fork的项目中推送与抓取

    github -- fork提交项目:自己的仓库和原仓库进行Git同步的操作. 1. 获取你fork的原仓库的更新过的最新代码:如果没有远程原始分支则需要增加. git remote add upst ...

  4. Python3 字典 get() 方法

     Python3 字典 描述 Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 ...

  5. 如何调整Flash与div的相互位置

    让flash置于DIV层之下的方法,让flash不挡住飘浮层或下拉菜单,让Flash不档住浮动对象或层的关键参数:wmode=opaque. 方法如下: 针对IE 在<object>< ...

  6. Myeclipse下配置SVN报错问题 svn: E175002: java.lang.RuntimeException: Could not generate DH keypair,缺少subclipse插件的javaHL

    在myeclipse10.0下安装svn插件,出现了Could not generate DH keypair,这么一个错误. 看到了一篇博客说是svn接口选择问题,可是我myeclipse没有那个接 ...

  7. 洛谷P2617 Dynamic Rankings (主席树)

    洛谷P2617 Dynamic Rankings 题目描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a ...

  8. SQL基础操作

    SQL是操作数据的语言 增加记录: insert into 数据表名称(字段1,字段2,字段3....)values(值1,值2,值3.....) 查看表结构:desc 表名 inset into x ...

  9. Final类和Final方法

    终止继承 Final类 当关键字final用来修饰类时,其含义是该类不能在派生子类.换句话说,任何其他类都不能继承用final修饰的类,即使该类的访问限制为public类型,也不能被继承:否则,将编译 ...

  10. 使用nginx做反向代理

    很多同学喜欢用nginx做反向代理访问某些网站,原因大家都懂的,今天老高记录一下如何使用nginx做反向代理以及如何配置和优化nginx的反向代理. 准备工作 首先,你需要一个稳定的国外的便宜的VPS ...