2012-06-25 2 views
8

Рассмотрим простой пример -Как инициализировать объект Java Date в файле конфигурации Spring xml?

public class Person 
{ 
    private String name; 
    private Date dateOfBirth; 

    // getters and setters here... 
} 

Для инициализации Person как Spring бина, я могу написать следующее.

<bean id = "Michael" class = "com.sampleDomainName.Person"> 
<property name = "name" value = "Michael" /> 
</bean> 

Но в приведенном выше описании компонента, как я могу установить датуOfBirth?

Для примера. Я хочу, чтобы установить DateOfBirth в

1998-05-07 

ответ

2

Один из приведенных здесь ответов полезен, но ему нужна дополнительная информация. Необходимо предоставить аргументы конструктора для CustomDateEditor.

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

<bean id = "customDateEditor" 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> 

Теперь мы можем сделать

<property name="dateOfBirth" value="1998-05-07" /> 
7

относиться к нему, как и любому другому POJO (который является)

<property name="dateOfBirth"> 
    <bean class="java.util.Date" /> 
</property> 

Если вам нужно использовать явное значение (например, 1975-04-10), затем просто вызовите один из других конструкторов (хотя те, которые принимают год-месяц-день, устарели). Вы также можете использовать явный java.beans.PropertyEditor, который Spring rolls with already (см. Раздел 6.4.2; обратите внимание, что вы можете написать свои собственные редакторы и зарегистрировать их для своих собственных типов). Вы должны зарегистрировать CustomEditorConfigurer в вашей конфигурации:

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"> 
    <property name="customEditors"> 
    <map> 
     <entry key="java.util.Date" 
      value="org.springframework.beans.propertyeditors.CustomDateEditor"/> 
    </map> 
    </property> 
</bean> 

Тогда ваши данные выглядит следующим образом:

<property name="dateOfBirth" value="1975-04-10" /> 

Я мог бы добавить, что Date является не соответствующий типа данных для хранения даты- из-за того, что Date действительно является мгновенным временем. Вы можете посмотреть на Joda и использовать класс LocalDate.

+0

Он, вероятно, хочет инициализировать его до определенной даты, а не по времени. –

-1

Spring inject Date into bean property – CustomDateEditor

Эта статья даст два предложения:

  1. завод боб
  2. CustomDateEditor

Я предлагаю «Фабричный фасоль», потому что CustomDateEditor не поддерживается весной 4.0+, а Factory Bean достаточно прост в использовании.

<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> 
+0

Можете ли вы включить некоторые основы того, что покрывает ссылка? В противном случае, если эта ссылка недоступна в будущем, этот ответ больше ничего не свяжет. –

+0

@DanLowe Привет, У меня есть пример из ссылки, которую я предложил – nkduqi

Смежные вопросы