利用属性编辑器完成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方法。