美文网首页
Spring inject Date into bean pro

Spring inject Date into bean pro

作者: lovePython | 来源:发表于2015-08-20 14:28 被阅读79次

    Spring example to show you how to inject a “Date” into bean property.

    package com.mkyong.common;
    import java.util.Date;
    
    public class Customer { 
        Date date; 
        public Date getDate() { 
           return date; 
        } 
        public void setDate(Date date) { 
            this.date = date; 
        } 
        @Override 
        public String toString() { 
            return "Customer [date=" + date + "]"; 
        }
    }
    

    Bean configuration file

    <?xml version="1.0"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
        <bean id="customer" class="com.mkyong.common.Customer">
            <property name="date" value="2010-01-31" />
        </bean>
    </beans>
    

    Run it

    package com.mkyong.common;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class App { 
    
        public static void main(String[] args) { 
    
            ApplicationContext context = new ClassPathXmlApplicationContext( "SpringBeans.xml"); 
            Customer cust = (Customer) context.getBean("customer"); 
            System.out.println(cust); 
        }
    }
    

    You will encounter follow error messages :

    Caused by: org.springframework.beans.TypeMismatchException: 
        Failed to convert property value of type [java.lang.String] to 
        required type [java.util.Date] for property 'date'; 
    
    nested exception is java.lang.IllegalArgumentException: 
        Cannot convert value of type [java.lang.String] to
        required type [java.util.Date] for property 'date': 
        no matching editors or conversion strategy found
    ``
    Solution
    In Spring, you can inject a `Date` via two methods :
    
    ###1. Factory bean
    Declare a dateFormat bean, in “`customer`” bean, reference “`dateFormat`” bean as a factory bean. The factory method will call `SimpleDateFormat.parse()` to convert String into Date object automatically.
    

    <?xml version="1.0"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="dateFormat" class="java.text.SimpleDateFormat">
    <constructor-arg value="yyyy-MM-dd" />
    </bean>
    <bean id="customer" class="com.mkyong.common.Customer">
    <property name="date">
    <bean factory-bean="dateFormat" factory-method="parse">
    <constructor-arg value="2010-01-31" />
    </bean>
    </property>
    </bean>
    </beans>

    ##2. CustomDateEditor
    Declares a `CustomDateEditor` class to convert `String` into **`java.util.Date`**.
    

    <?xml version="1.0"?>
    <bean id="dateEditor" class="org.springframework.beans.propertyeditors.CustomDateEditor">
    <constructor-arg>
    <bean class="java.text.SimpleDateFormat">
    <constructor-arg value="yyyy-MM-dd" />
    </bean>
    </constructor-arg>
    <constructor-arg value="true" />
    </bean>

    
    And declares another “`CustomEditorConfigurer`”, to make Spring convert bean properties whose type is **`java.util.Date`**.
    
    

    <?xml version="1.0"?>
    <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="customEditors">
    <map>
    <entry key="java.util.Date">
    <ref local="dateEditor" />
    </entry>
    </map>
    </property>
    </bean>

    
    Full example of bean configuration file.
    

    <?xml version="1.0"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="dateEditor" class="org.springframework.beans.propertyeditors.CustomDateEditor">
    <constructor-arg>
    <bean class="java.text.SimpleDateFormat">
    <constructor-arg value="yyyy-MM-dd" />
    </bean>
    </constructor-arg>
    <constructor-arg value="true" />
    </bean>
    <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="customEditors">
    <map>
    <entry key="java.util.Date">
    <ref local="dateEditor" />
    </entry>
    </map>
    </property>
    </bean>
    <bean id="customer" class="com.mkyong.common.Customer">
    <property name="date" value="2010-02-31" />
    </bean>
    </beans>

    相关文章

      网友评论

          本文标题:Spring inject Date into bean pro

          本文链接:https://www.haomeiwen.com/subject/gejgqttx.html