通常情况下,我们给Spring的bean注入属性可以通过setter方法和构造器方法给bean注入属性值,这两种方法都需要使用property标签给bean的属性赋值。
如下所示,使用setter方法给bean注入Date属性值
public
class
DateTest {
private
Date
date
;
public
Date getDate() {
return
date
;
}
public
void
setDate(Date
date
) {
this
.
date
=
date
;
}
@Override
public
String
toString() {
return
"DateTest [date="
+
date
+
"]"
;
}
}
bean配置文件:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xsi:schemaLocation
=
"
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
;
>
<
bean
id
=
"dateTest"
class
=
"com.spenglu.DateTest"
>
<
property
name
=
"date"
value
=
"2017-11-24"
></
property
>
</
bean
>
</
beans
>
运行如下代码:
public
static
void
main(String[]
args
) {
ApplicationContext
context
=
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
DateTest
date
= (DateTest)
context
.getBean(
"dateTest"
);
System.
out
.println(
date
);
}
输出结果为:
Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'date';
由输出结果可以知道,输出结果报错,报了类型转换问题,就是不能将String类型的直接赋值给为Date类型的。因此,我们要解决的问题就是怎样将String值转换为Date类型的。
在Spring中可以通过工厂bean来将字符串转换为Date对象。而在Spring中充当这个工厂bean的为java.text.SimpleDateFormat,通过它的parse()方法可以String对象转换给Date类型。如下所示:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xsi:schemaLocation
=
"
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
;
>
<
bean
id
=
"simpleDateFormat"
class
=
"java.text.SimpleDateFormat"
>
<
constructor-arg
value
=
"yyyy-MM-dd"
></
constructor-arg
>
</
bean
>
<
bean
id
=
"dateTest"
class
=
"com.yiibai.pojo.DateTest"
>
<
property
name
=
"date"
>
<!-- 下面这个bean是用来将String对象转换为Date对象的 -->
<
bean
factory-bean
=
"simpleDateFormat"
factory-method
=
"parse"
>
<
constructor-arg
value
=
"2017-11-24"
></
constructor-arg
>
</
bean
>
</
property
>
</
bean
>
</
beans
>
输出结果为:
DateTest [date=Fri Nov 24 00:00:00 CST 2017]