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