`
kanpiaoxue
  • 浏览: 1781915 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring如何注入Date类型的变量

 
阅读更多

 

地址: http://k2java.blogspot.com/2011/04/spring-how-to-pass-date-into-bean.html

 

Thursday, April 14, 2011

Spring – How to pass a Date into bean property (CustomDateEditor )


Simple method may not work
Generally, Spring developer are not allow to pass a date format parameter into bean property via DI.

For example,

publicclass CustomerService

{

    Date date;

 

    publicDate getDate(){

        return date;

    }

 

    publicvoid setDate(Date date){

        this.date = date;

    }

 

}


Bean configuration file

<beansxmlns="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">

 

   <beanid="customerService"class="com.services.CustomerService">

       <propertyname="date"value="2010-01-31"/>

   </bean>

 

</beans>


Run it

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import com.mkyong.customer.services.CustomerService;

 

publicclass App

{

    publicstaticvoid main(String[] args )

    {

        ApplicationContext context =

          new ClassPathXmlApplicationContext(newString[]{"Spring-Customer.xml"});

 

        CustomerService cust =(CustomerService)context.getBean("customerService");

        System.out.println(cust.getDate());

    }

}


Error message prompt.

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

There are two solutions available.

1. Factory bean

Declare a dateFormat bean, and reference it as a factory bean from the date property. The factory method will call the SimpleDateFormat.parse() menthod to convert the String into Date object automatically.

<beansxmlns="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">

 

   <beanid="dateFormat"class="java.text.SimpleDateFormat">

    <constructor-argvalue="yyyy-MM-dd"/>

   </bean>

 

   <beanid="customerService"class="com.mkyong.customer.services.CustomerService">

       <propertyname="date">

           <beanfactory-bean="dateFormat"factory-method="parse">

            <constructor-argvalue="2010-01-31"/>

        </bean>

    </property>

   </bean>

 

</beans>


2. Property editors (CustomEditorConfigurer + CustomDateEditor)

Declare a CustomDateEditor class to convert the String into java.util.Date properties.

<beanid="dateEditor"

       class="org.springframework.beans.propertyeditors.CustomDateEditor">

 

    <constructor-arg>

        <beanclass="java.text.SimpleDateFormat">

            <constructor-argvalue="yyyy-MM-dd"/>

        </bean>

    </constructor-arg>

    <constructor-argvalue="true"/>

 

  </bean>


Register the CustomDateEditor in CustomEditorConfigurer, so that the Spring will convert the properties whose type is java.util.Date.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

<beanclass="org.springframework.beans.factory.config.CustomEditorConfigurer">

        <propertyname="customEditors">

            <map>

            <entrykey="java.util.Date">

                <reflocal="dateEditor"/>

            </entry>

            </map>

        </property>

    </bean>


Bean configuration file.

<beansxmlns="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">

 

  <beanid="dateEditor"

    class="org.springframework.beans.propertyeditors.CustomDateEditor">

 

    <constructor-arg>

        <beanclass="java.text.SimpleDateFormat">

            <constructor-argvalue="yyyy-MM-dd"/>

        </bean>

    </constructor-arg>

    <constructor-argvalue="true"/>

 

  </bean>

 

  <beanclass="org.springframework.beans.factory.config.CustomEditorConfigurer">

    <propertyname="customEditors">

       <map>

        <entrykey="java.util.Date">

            <reflocal="dateEditor"/>

        </entry>

       </map>

    </property>

   </bean>

 

   <beanid="customerService"class="com.mkyong.customer.services.CustomerService">

       <propertyname="date"value="2010-02-31"/>

   </bean>

 

</beans>

 

 

分享到:
评论

相关推荐

    Spring_SpEl表达式使用用例

    `T()`函数用于引入类型,如`T(java.util.Date)`获取Date类。`P()`函数则用于访问属性路径,通常与XML配置文件中的`&lt;beans:property/&gt;`标签一起使用。 8. ** spel表达式在AOP中的应用** 在Spring AOP中,SpEL可...

    Spring MVC 入门实例

    2 * Date: 2006-8-26 3 * File: HelloController.java 4 * Author: ideawu 5 ***********************************************************/ 6 7 package com.ideawu; 8 9 import org.springframework....

    Spring Boot技术培训

    - **日期格式化**:使用 `${#dates.format(date, "yyyy-MM-dd HH:mm:ss")}` 格式化日期。 - **日期解析**:使用 `${#dates.parse("2021-01-01", "yyyy-MM-dd")}` 解析日期字符串。 通过以上知识点的学习,开发者...

    spring-expression-3.2.3.release.jar.zip

    在实际应用中,SpEL广泛用于Spring的依赖注入、AOP切面、MVC控制器以及其他需要动态计算的场景。例如,在配置文件中,我们可以使用SpEL来动态设置Bean的属性值,如`['myPropertyKey']}" /&gt;`,这样系统属性的变化就能...

    Spring3.1整合FreeMarker2.3.19

    标题“Spring3.1整合FreeMarker2.3.19”指的是在Spring 3.1版本的框架中集成FreeMarker 2.3.19模板引擎的过程和相关知识点。FreeMarker是一个开源的Java库,用于生成动态HTML、XML或其他类型的文本,常用于Web应用...

    spring mvc注释文档

    ### Spring MVC注释文档知识点详解 #### 概述 随着技术的发展与演进,软件开发领域不断出现新的设计理念和技术框架。Spring MVC作为Spring框架的重要组成部分之一,在Spring 2.5版本中引入了基于注解的配置方式,...

    Spring boot 配置参数一览.pdf

    Spring Boot 是一个开源的 Java 基础框架,主要用于快速、简便地...此外,Spring Boot还支持通过命令行参数、环境变量、JNDI、Servlet上下文参数等多种方式设置配置参数。这为不同的部署和运行环境提供了极大的灵活性。

    Spring MVC自定义日期类型转换器实例详解

    2. 设置日期格式:转换器中定义了一个String类型的变量format,用来指定日期格式化的模板。在这个例子中,它被设置为"yyyy-MM-dd",符合大多数场景下对日期显示的需求。 3. 实现转换逻辑:在process方法中,我们...

    SpringBoot系列之 PropertySource用法的简介.docx

    `@PropertySource`在Spring Boot中,通常与`@ConfigurationProperties`结合使用,以实现更高级别的属性绑定和类型安全的属性注入。 `@PropertySource`注解的使用方法如下: 1. **定义**: `@PropertySource`用来...

    Spring定时器的实例.docx

    在`ScheduledTimer`中,`TimeKit1.getDateByString(TimeKit1.now("short"))`可能用于将当前时间转换为特定格式的字符串,然后创建一个新的`Date`对象。 6. **InfopushDocClass 和 InfopushDoc** 这两个类是业务...

    spring boot 定时任务源码

    Spring为每个任务创建一个单独的线程,因此在任务方法中,你可以访问`ThreadLocal`变量或`@Autowired`的bean,但要注意并发问题。 6. **监控和管理定时任务** 使用Spring Boot Admin或者Actuator模块,可以可视化...

    Eclipse+tomcat+maven 配置Spring

    接下来,可以创建Spring配置文件(如applicationContext.xml),定义bean和注入依赖。同时,配置Web.xml以初始化Spring DispatcherServlet,使Spring MVC框架生效。 9. **Spring MVC**: Spring MVC是Spring框架的...

    Freemarker整合spring实例详解

    Spring框架则是Java领域中广泛使用的轻量级应用框架,它提供了丰富的功能,包括依赖注入、AOP、数据访问等。在实际开发中,将Freemarker整合到Spring中可以实现灵活的视图渲染。 首先,我们需要在Spring配置文件...

    如何在Spring Boot应用中优雅的使用Date和LocalDateTime的教程详解

    在 Spring Boot 应用中优雅的使用 Date 和 LocalDateTime 需要了解 Date 和 SimpleDateFormat 的缺陷,使用新的日期时间 API,配置全局的日期时间格式,了解如何在 JSON 方式传参和 GET 请求及 POST 表单方式传参两...

    Spring各版本新特性的介绍

    * 添加了用于构造器注入的c命名空间,类似与Spring 2的p命名空间,用于对应属性注入。 * 开始支持Servlet 3.0,包括基于java配置中生命Servlet和Filter,不再只仅仅借助web.xml。 * 改善对于JPA的支持,让JPA能在...

    spring-social-google-1.0.0.RELEASE.zip

    6. Type注解:允许在类型(包括参数、返回值、字段和局部变量)上使用注解,增强了静态分析和代码工具的功能。 Walkmod-javalang-plugin可能利用了这些特性,提供辅助工具,帮助开发者遵循Java 8的最佳实践,检查...

    Spring MVC之@RequestMapping详解

    public Map, Appointment&gt; getForDay(@PathVariable Date day, Model model) { return appointmentBook.getAppointmentsForDay(day); } // ... } ``` 在这个例子中,`/appointments`是类级别的@RequestMapping...

    74个java面试题,只有题目没有答案

    * 什么是 Spring 依赖注入?依赖注入是一种机制,用于在运行时提供对象实例。 37. Spring 控制反转 * 什么是 Spring 控制反转?控制反转是一种机制,用于在运行时管理对象实例。 38. Spring AOP * 什么是 Spring...

    Spring Boot 配置大全(小结)

    spring.mvc.date-format 是 Spring Boot 中的一种配置项,通过使用 `spring.mvc.date-format` 可以指定日期的格式。 十二、spring.mvc.favicon.enabled spring.mvc.favicon.enabled 是 Spring Boot 中的一种配置项...

Global site tag (gtag.js) - Google Analytics