spring bean 日期格式注入的几种模式

1 当我们进行bean注入到spring当中的时候,这个bean当中可能会存在着一些特殊类型的数据元素,如Date类型,当我们不进行一些特殊处理的时候,想直接给其赋值就会报告错误。

我们定义了如下类

package com.japie.customproperty;

import java.util.Date;
/**
 * 自定义属性配置
 * @author Japie
 * 下午06:15:04
 */
public class BoyMan {
	private Date birthDay;
	private String username;

	public BoyMan() {
	}

	public Date getBirthDay() {
		return birthDay;
	}

	public void setBirthDay(Date birthDay) {
		this.birthDay = birthDay;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}
	@Override
	public String toString()
	{
		return "BoyMan:["+username+this.birthDay+"]";
	}
	public static void main(String[] args) {
	}

}

 配置文件为

<bean id="boyMan" class="com.japie.customproperty.BoyMan">
		<property name="birthDay" value="2011-06-17">
		<property name="username" value="japie"/>
</bean>

 当进行测试的时候报告如下的错误。

Caused by: org.springframework.beans.TypeMismatchException: 
	Failed to convert property value of type [java.lang.String] to 
	required type [java.util.Date] for property 'birthDay';

 2 那么如何解决上面的问题呢,有如下几种方法供参考

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.

    1) 定义一个dateFormat bean,而后通而后通过工程模式在boyman这个类当中用构造器的模式进行引用,其实就是调用SimpleDateFormat.parse() 的方法,配置文件如下

<bean id="boyMan" class="com.japie.customproperty.BoyMan">
		<property name="birthDay">
		 <bean factory-bean="dateFormat" factory-method="parse">
		 	<constructor-arg value="2011-06-17" />
		 </bean>
		</property>
		<property name="username" value="japie"/>
</bean>

 如此就可以进行正常的赋值了。

2)自定义日期熟悉编辑器

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

3』通过重写spring的熟悉方法来实现代码如下

package com.japie.injection;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * java.util.Date属性编辑器
 * @author japie
 *
 */
public class UtilDatePropertyEditor extends PropertyEditorSupport {

	private String pattern;
	
	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		System.out.println("---UtilDatePropertyEditor.setAsText()--->" + text);
		try {
			Date date = new SimpleDateFormat(pattern).parse(text);
			this.setValue(date);
		} catch (ParseException e) {
			e.printStackTrace();
			throw new IllegalArgumentException(text);
		}
	}

	public void setPattern(String pattern) {
		this.pattern = pattern;
	}

	
}
 

以及在我们具体的bean当中引用其的配置

<bean id="boyMan" class="com.japie.customproperty.BoyMan">
		<property name="birthDay" value="2011-06-17" />
		<property name="username" value="japie"/>
</bean>

猜你喜欢

转载自cjjwzs.iteye.com/blog/1097099