我们知道,spring在为我们进行动态创建对象过程中,给我们提供了一系列用于处理Java对象变量类型的属性标签,如<value>,<list>,<set>,<map>,<props>和<prop>等,但是对于一些较为复杂的变量类型,spring不会也无法提供,如java.util.Date,这就要求我们利用属性编辑器自行处理。以Date为例:
1>.编写目标类:Student.java
public
class Student {
private Date birthday;
//setter.getter方法
}
private Date birthday;
//setter.getter方法
}
2>.编写属性编辑器:DateEditor.java
public
class DateEditor
extends PropertyEditorSupport {
//必须继承PropertyEditorSupport
@Override
public void setAsText(String text) throws IllegalArgumentException { //text是从配置文件中取得的字符串
try {
SimpleDateFormat format= new SimpleDateFormat( "y-m-d");
Date date=format.parse(text);
setValue(date); //setValue()是从父类继承来的方法,作用是把生成的date对象设置到目标类中
} catch (ParseException e) {
e.printStackTrace();
}
}
}
@Override
public void setAsText(String text) throws IllegalArgumentException { //text是从配置文件中取得的字符串
try {
SimpleDateFormat format= new SimpleDateFormat( "y-m-d");
Date date=format.parse(text);
setValue(date); //setValue()是从父类继承来的方法,作用是把生成的date对象设置到目标类中
} catch (ParseException e) {
e.printStackTrace();
}
}
}
3>.配置文件:test.xml
<
beans
>
< bean id ="editor" class ="org.springframework.beans.factory.config.CustomEditorConfigurer" >
< property name ="customEditors" >
< map >
< entry >
< key > < value >java.util.Date </ value > </ key ><!-- 目标类型-->
< bean id ="myEditor" class ="com.cernet.spring.editor.DateEditor" />
</ entry >
</ map >
</ property >
</ bean >
< bean id ="student" class ="com.cernet.spring.editor.Student" >
< property name ="birthday" >
< value >1988-08-08 </ value >
</ property >
</ bean >
</ beans >
< bean id ="editor" class ="org.springframework.beans.factory.config.CustomEditorConfigurer" >
< property name ="customEditors" >
< map >
< entry >
< key > < value >java.util.Date </ value > </ key ><!-- 目标类型-->
< bean id ="myEditor" class ="com.cernet.spring.editor.DateEditor" />
</ entry >
</ map >
</ property >
</ bean >
< bean id ="student" class ="com.cernet.spring.editor.Student" >
< property name ="birthday" >
< value >1988-08-08 </ value >
</ property >
</ bean >
</ beans >
4>.测试类:Test.java
public
static
void main(String[] args) {
ApplicationContext ctx= new ClassPathXmlApplicationContext( "test.xml");
Student stu=(Student)ctx.getBean( "student");
System.out.println(stu.getBirthday());
ApplicationContext ctx= new ClassPathXmlApplicationContext( "test.xml");
Student stu=(Student)ctx.getBean( "student");
System.out.println(stu.getBirthday());
运行结果:Fri Jan 08 00:08:00 CST 1988
说明:
1.在整个过程中,我们需要做的只是定义属性编辑器并配置到文件中,对编辑器的使用是由spring类完成的。所以,属性编辑器的应用并不是想象中的那么难。
2.它的运行过程是这样的:在创建ctx之前(ApplicationContext采用饿汉式加载对象),创建Student对象时,spring发现需要注入的变量birthday是Date类型的并且本身没有提供处理此类型数据的标签,于是容器会到配置文件中查找合适的编辑器。当它发现myEditor合适时,就交给了我们编写的com.cernet.spring.editor.DateEditor来进行处理。
3.注意BeanFactory是不支持属性编辑器的。
本文转自NightWolves 51CTO博客,原文链接:http://blog.51cto.com/yangfei520/244989
,如需转载请自行联系原作者