`
wooden_baby
  • 浏览: 12962 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
最近访客 更多访客>>
社区版块
存档分类
最新评论

spring 自定义属性编辑器

阅读更多

前言: 使用spring的属性注入可以为一个实体bean(有对应的set方法)的属性注入值,例如:

<bean id="studySPro" class="study.spring.StudySPro">
		<property name="intValue" value="100"></property>
		<property name="strValue" value="stringValue"></property>
		<property name="doubleValue" value="10.36"></property>
		<property name="listValue">
			<list>
				<value>listValue1</value>
				<value>listValue2</value>
				<value>listValue3</value>
			</list>
		</property>
		<property name="mapValue">
			<map>
				<entry key="key1" value="value1"/>
				<entry key="key2" value="value2"/>
				<entry key="key3" value="value3"/>
			</map>
		</property>
		<property name="setValue">
			<set>
				<value>setValue1</value>
				<value>setValue2</value>
				<value>setValue3</value>
			</set>
		</property>
		<property name="arrayStrValue">
			<list>
				<value>arrayStrValue1</value>
				<value>arrayStrValue2</value>
				<value>arrayStrValue3</value>
			</list>
		</property>
		<property name="dateValue" value="1988-02-16"></property>
	</bean>

  当在对一个java.util.Date类型的属性注入值的时候,会出现异常,因为spring默认的方式不能够将类似"1988-02-16"的字符串解析为java.util.Date类型.为了解决这个问题,我们需要自己编写将类似"1988-02-16"这样的字符串解析为Date对象的方式,就是这里要说明的 “自定义属性编辑器” .

 首先定义一个"自定义属性编辑器类",该类继承了java.beans.PropertyEditorSupport,并且覆写该类的setAsText(String text)方法,通过这个text参数,我们可以拿到欲转换的字符串,例如"1988-02-16".

package study.spring;

import java.beans.PropertyEditorSupport;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DatePropetyEdtor extends PropertyEditorSupport{

	private String format = "yyyy-MM-dd";
	
	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		DateFormat df = new SimpleDateFormat(format);
		try {
			Date date = df.parse(text);
			this.setValue(date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

 注意 : 这个setAsText方法并没有返回值,我们通过调用setValue(Object obj)方法使得我们将字符串转换后的Date对象生效.

 最后,要使得spring能够识别并使用我们的自定义属性编辑器,我们需要将这个类注入到一个spring的类的属性中,该属性是org.springframework.beans.factory.config.CustomEditorConfigurer类的customEditors属性,该属性是一个map类型,我们的注入方式类似这样:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
					<bean class="study.spring.DatePropetyEdtor"></bean>
				</entry>
			</map>
		</property>
	</bean>

</beans>

 到这里,我们的自定义属性编辑器就可以正常工作了.

 

其他 :

         对于例子代码中 <property name="dateValue" value="1988-02-16"></property>,如果这里我们注入的值变为 "1988/02/16",则又会出异常了,因为我们的 format = "yyyy-MM-dd",对于这种情况,我们可以将转换格式format也抽取出来,使用spring的注入来为其赋值. 例如在构造函数中为format赋值,或者为format添加一个set方法。

分享到:
评论

相关推荐

    spring中的自定义属性编辑器

    spring中的自定义属性编辑器,是我博客中的源代码,spring中的自定义属性编辑器,是我博客中的源代码

    springmvc自定义属性编辑器和参数解析器

    springmvc自定义属性编辑器和参数解析器

    spring2.0(三) 自定义属性编辑器

    NULL 博文链接:https://yxwang0615.iteye.com/blog/969360

    Spring学习笔记(11)----自定义属性编辑器

    NULL 博文链接:https://coolszy.iteye.com/blog/522095

    自定义属性编辑及Spring处理器映射

    java中的属性编辑器详细说明及Spring中AnnotationMethodHandlerAdapter说明和DefaultAnnotationHandlerMapping的说明及用法

    SpringPropertyEditorDemo:演示使用自定义属性编辑器绑定Spring-MVC中用户定义的对象的集合

    SpringPropertyEditorDemo 演示使用自定义属性编辑器绑定Spring-MVC中用户定义的对象的集合

    spring数据格式转换

    spring数据格式转换 自定义的属性编辑器进行数据绑定

    Spring2.0学习笔记

    1、ICO环境的搭建 2、属性注入 3、自定义属性编辑器 4、AOP实现 5、事务处理 6、Spring事务配置的五种方式 详解 7、Struts与Spring集成方案

    spring.net中文手册在线版

    4.3.3.详细讨论对象属性和构造器参数 4.3.3.1.设置空值 4.3.3.2.设置集合值 4.3.3.3.设置泛型集合的值 4.3.3.4.设置索引器属性 4.3.3.5.内联对象定义 4.3.3.6.idref节点 4.3.3.7.引用协作对象 4.3.3.8.value和ref...

    Spring.3.x企业应用开发实战(完整版).part2

    5.2.3 自定义属性编辑器 5.3 使用外部属性文件 5.3.1 使用外部属性文件 5.3.2 使用加密的属性文件 5.3.3 属性文件自身的引用 5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的...

    Spring 2.0 开发参考手册

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    Spring攻略(第二版 中文高清版).part1

    2.16 创建自定义属性编辑器 99 2.16.1 问题 99 2.16.2 解决方案 100 2.16.3 工作原理 100 2.17 使用TaskExecutor实现并发性 101 2.17.1 问题 101 2.17.2 解决方案 101 2.17.3 工作原理 102 2.18 小...

    Spring中文帮助文档

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    Spring API

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    spring chm文档

    5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...

    Spring攻略(第二版 中文高清版).part2

    2.16 创建自定义属性编辑器 99 2.16.1 问题 99 2.16.2 解决方案 100 2.16.3 工作原理 100 2.17 使用TaskExecutor实现并发性 101 2.17.1 问题 101 2.17.2 解决方案 101 2.17.3 工作原理 102 2.18 小...

    Spring3.x企业应用开发实战(完整版) part1

    5.2.3 自定义属性编辑器 5.3 使用外部属性文件 5.3.1 使用外部属性文件 5.3.2 使用加密的属性文件 5.3.3 属性文件自身的引用 5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级...

    Spring in Action(第2版)中文版

    3.4注册自定义属性编辑器 3.5使用spring的特殊bean 3.5.1后处理bean 3.5.2bean工厂的后处理 3.5.3配置属性的外在化 3.5.4提取文本消息 3.5.5程序事件的解耦 3.5.6让bean了解容器 3.6脚本化的bean 3.6.1给...

Global site tag (gtag.js) - Google Analytics