地址: 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>
相关推荐
`T()`函数用于引入类型,如`T(java.util.Date)`获取Date类。`P()`函数则用于访问属性路径,通常与XML配置文件中的`<beans:property/>`标签一起使用。 8. ** spel表达式在AOP中的应用** 在Spring AOP中,SpEL可...
2 * Date: 2006-8-26 3 * File: HelloController.java 4 * Author: ideawu 5 ***********************************************************/ 6 7 package com.ideawu; 8 9 import org.springframework....
- **日期格式化**:使用 `${#dates.format(date, "yyyy-MM-dd HH:mm:ss")}` 格式化日期。 - **日期解析**:使用 `${#dates.parse("2021-01-01", "yyyy-MM-dd")}` 解析日期字符串。 通过以上知识点的学习,开发者...
在实际应用中,SpEL广泛用于Spring的依赖注入、AOP切面、MVC控制器以及其他需要动态计算的场景。例如,在配置文件中,我们可以使用SpEL来动态设置Bean的属性值,如`['myPropertyKey']}" />`,这样系统属性的变化就能...
标题“Spring3.1整合FreeMarker2.3.19”指的是在Spring 3.1版本的框架中集成FreeMarker 2.3.19模板引擎的过程和相关知识点。FreeMarker是一个开源的Java库,用于生成动态HTML、XML或其他类型的文本,常用于Web应用...
### Spring MVC注释文档知识点详解 #### 概述 随着技术的发展与演进,软件开发领域不断出现新的设计理念和技术框架。Spring MVC作为Spring框架的重要组成部分之一,在Spring 2.5版本中引入了基于注解的配置方式,...
Spring Boot 是一个开源的 Java 基础框架,主要用于快速、简便地...此外,Spring Boot还支持通过命令行参数、环境变量、JNDI、Servlet上下文参数等多种方式设置配置参数。这为不同的部署和运行环境提供了极大的灵活性。
2. 设置日期格式:转换器中定义了一个String类型的变量format,用来指定日期格式化的模板。在这个例子中,它被设置为"yyyy-MM-dd",符合大多数场景下对日期显示的需求。 3. 实现转换逻辑:在process方法中,我们...
`@PropertySource`在Spring Boot中,通常与`@ConfigurationProperties`结合使用,以实现更高级别的属性绑定和类型安全的属性注入。 `@PropertySource`注解的使用方法如下: 1. **定义**: `@PropertySource`用来...
在`ScheduledTimer`中,`TimeKit1.getDateByString(TimeKit1.now("short"))`可能用于将当前时间转换为特定格式的字符串,然后创建一个新的`Date`对象。 6. **InfopushDocClass 和 InfopushDoc** 这两个类是业务...
Spring为每个任务创建一个单独的线程,因此在任务方法中,你可以访问`ThreadLocal`变量或`@Autowired`的bean,但要注意并发问题。 6. **监控和管理定时任务** 使用Spring Boot Admin或者Actuator模块,可以可视化...
接下来,可以创建Spring配置文件(如applicationContext.xml),定义bean和注入依赖。同时,配置Web.xml以初始化Spring DispatcherServlet,使Spring MVC框架生效。 9. **Spring MVC**: Spring MVC是Spring框架的...
Spring框架则是Java领域中广泛使用的轻量级应用框架,它提供了丰富的功能,包括依赖注入、AOP、数据访问等。在实际开发中,将Freemarker整合到Spring中可以实现灵活的视图渲染。 首先,我们需要在Spring配置文件...
在 Spring Boot 应用中优雅的使用 Date 和 LocalDateTime 需要了解 Date 和 SimpleDateFormat 的缺陷,使用新的日期时间 API,配置全局的日期时间格式,了解如何在 JSON 方式传参和 GET 请求及 POST 表单方式传参两...
* 添加了用于构造器注入的c命名空间,类似与Spring 2的p命名空间,用于对应属性注入。 * 开始支持Servlet 3.0,包括基于java配置中生命Servlet和Filter,不再只仅仅借助web.xml。 * 改善对于JPA的支持,让JPA能在...
6. Type注解:允许在类型(包括参数、返回值、字段和局部变量)上使用注解,增强了静态分析和代码工具的功能。 Walkmod-javalang-plugin可能利用了这些特性,提供辅助工具,帮助开发者遵循Java 8的最佳实践,检查...
public Map, Appointment> getForDay(@PathVariable Date day, Model model) { return appointmentBook.getAppointmentsForDay(day); } // ... } ``` 在这个例子中,`/appointments`是类级别的@RequestMapping...
* 什么是 Spring 依赖注入?依赖注入是一种机制,用于在运行时提供对象实例。 37. Spring 控制反转 * 什么是 Spring 控制反转?控制反转是一种机制,用于在运行时管理对象实例。 38. Spring AOP * 什么是 Spring...
spring.mvc.date-format 是 Spring Boot 中的一种配置项,通过使用 `spring.mvc.date-format` 可以指定日期的格式。 十二、spring.mvc.favicon.enabled spring.mvc.favicon.enabled 是 Spring Boot 中的一种配置项...