Spring日期类型注入
利用属性编辑器完成Spring日期类型的注入
ApplicationContext.xml注入配置如下:
?
<bean id="bin" class="com.apj.client.Bin">
??? ??? <property name="strValue" value="FredKing" />
??? ??? <property name="dateValue" value="2011-01-09" />
??? ?</bean>
?
下面的日期类型注入后读取出现类型转换错误,以下是jUnit的测试类:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
?
import junit.framework.TestCase;
?
public class SpringUnitTest extends TestCase {
??? private BeanFactory factory;
??? @Override
??? protected void setUp() throws Exception {
?????? factory = new ClassPathXmlApplicationContext("applicationContext.xml");
?????? super.setUp();
??? }
??? public void testSpring(){
?????? System.out.println("bin.strValue:"+((Bin)factory.getBean("bin")).getStrValue());
?????? System.out.println("bin.dateValue:"+((Bin)factory.getBean("bin")).getDateValue());
??? }
}
下面是Bin类:
import java.util.Date;
?
public class Bin {
??? private String strValue;
??? private Date dateValue;
??? public String getStrValue() {
?????? return strValue;
??? }
??? public void setStrValue(String strValue) {
?????? this.strValue = strValue;
??? }
??? public Date getDateValue() {
?????? return dateValue;
??? }
??? public void setDateValue(Date dateValue) {
?????? this.dateValue = dateValue;
??? }
???
}
?
需要创建一个属性编辑器类继承PropertyEditorSupport:
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
?
?
public class DatePropertyEditer extends PropertyEditorSupport {
??? private String format = "yyyy-MM-dd";
??? @Override
??? public void setAsText(String text) throws IllegalArgumentException {
?????? SimpleDateFormat sdf = new SimpleDateFormat(format);
?????? try {
?????????? this.setValue(sdf.parse(text));
?????? } catch (ParseException e) {
??????????
?????????? e.printStackTrace();
?????? }?????
??? }
???
?
}
重写setAsText方法,将setValue方法设置格式化后的值。
最后配置一下ApplicationContext.xml如下
<bean id="customDateEditor" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
??? ??? <property name="customEditors">
??? ?????? <map>
??? ?????????? <entry key="java.util.Date">
??? ????????????? <bean class="com.apj.client.DatePropertyEditer" />
??? ?????????? </entry>
??? ?????? </map>
??? ??? </property>
??? ?</bean>
?
如果需要把format一并注入,只需修改为以下配置即可:
<bean id="customDateEditor" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
??? ??? <property name="customEditors">
??? ?????? <map>
??? ?????????? <entry key="java.util.Date">
??? ????????????? <bean class="com.apj.client.DatePropertyEditer" >
??? ????????????????? <property name="format" value="yyyy/MM/dd" />
??? ????????????? </bean>
??? ?????????? </entry>
??? ?????? </map>
??? ??? </property>
??? ?</bean>
同时由于是setter注入,需要在DatePropertyEditer类中加入setFormat方法。