当前位置: 代码迷 >> Web前端 >> spring 日期门类的注入
  详细解决方案

spring 日期门类的注入

热度:437   发布时间:2012-09-14 23:00:49.0
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方法。
  相关解决方案