最近学习到了spring的属性编辑器 PropertyEditor,由于想加深一下记忆,所以根据本人学习spring参考的书籍上的示例写了一个自定义属性编辑器,然而不美好的事情发生了,编写完运行后我得到的是一堆异常。源码如下:
DatePropertyEditor类
package com.zhu.propertyeditor;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DatePropertyEditor extends PropertyEditorSupport{
private String partten="yyyy-MM-dd";
public String getPartten() {
return partten;
}
public void setPartten(String partten) {
this.partten = partten;
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
SimpleDateFormat sdf=new SimpleDateFormat(partten);
Date value=null;
try {
value = sdf.parse(text);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.setValue(value);
}
}
DateTest类
package com.zhu.entity;
import java.util.Date;
public class DateTest {
private Date time;
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public void showTime(){
System.out.println(time);
}
}
测试代码
ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
DateTest dateTest=(DateTest)factory.getBean("dateTest");
dateTest.showTime();
配置:
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date" >
<ref bean="datePropertyEditor" />
</entry>
</map>
</property>
</bean>
<bean id="datePropertyEditor" class="com.zhu.propertyeditor.DatePropertyEditor">
<property name="partten" value="yyyy-MM-dd"></property>
</bean>
<bean id="dateTest" class="com.zhu.entity.DateTest">
<property name="time" value="2017-9-12"></property>
</bean>
经过我长时间不屑的努力后发现原来是因为spring版本的问题,由于我看的spring书籍年代久远,上面的示例还是使用的spring2.5版本,而我使用的是spring4.0后的版本,customEditors,在spring2.0 中是Map类型,,key的类型必须是Class类型,而value是一个注入的bean;在spring4.0中,key和value的类型必须是Class类型,也就是说配置信息中的 customEditors 中的value值不能在是bean,而应该修改成class
修改后的配置信息如下:
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date" value="com.zhu.propertyeditor.DatePropertyEditor" >
</entry>
</map>
</property>
</bean>
<bean id="dateTest" class="com.zhu.entity.DateTest">
<property name="time" value="2007-9-12"></property>
</bean>