前言: 使用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中的自定义属性编辑器,是我博客中的源代码
springmvc自定义属性编辑器和参数解析器
NULL 博文链接:https://yxwang0615.iteye.com/blog/969360
NULL 博文链接:https://coolszy.iteye.com/blog/522095
java中的属性编辑器详细说明及Spring中AnnotationMethodHandlerAdapter说明和DefaultAnnotationHandlerMapping的说明及用法
SpringPropertyEditorDemo 演示使用自定义属性编辑器绑定Spring-MVC中用户定义的对象的集合
spring数据格式转换 自定义的属性编辑器进行数据绑定
1、ICO环境的搭建 2、属性注入 3、自定义属性编辑器 4、AOP实现 5、事务处理 6、Spring事务配置的五种方式 详解 7、Struts与Spring集成方案
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...
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 容器级...
5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的...
5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...
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 小...
5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...
5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...
5. 校验,数据绑定,BeanWrapper,与属性编辑器 5.1. 简介 5.2. 使用Spring的Validator接口进行校验 5.3. 从错误代码到错误信息 5.4. Bean处理和BeanWrapper 5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建...
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 小...
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 容器级...
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给...