一、类型转换器
作用:Spring 通过类型转换器把配置文件中字符串类型的数据,转换成了对象中成员变量对应类型的数据,进而完成了注入。
二、自定义类型转换器
产生原因:当 Spring 内部没有提供特定类型转换器时,而程序员在应用的过程中还需要使用,那么就需要程序员自己定义类型转换器。
2.1 实现Conveter接口
自定义类实现Conveter
接口,这个接口要带有泛型,Converter<String, Date>
表示将原来的字符串转为Date格式。重写convert
方法,返回对应的数据。
public class MyDateConverter implements Converter<String, Date> {
/*
convert方法作用: String ---> Date
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.parset(String) ---> Date
参数:
source : 代表的是配置文件中, 日期字符串 <value>2020-10-11</value>
return : 当把转换好的 Date 作为 convert 方法的返回值后,
Spring ⾃动的为birthday属性进行注入(赋值)
*/
@Override
public Date convert(String source) {
Date date = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
date = sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
2.2 配置文件
先创建 MyDateConverter 对象,再注册类型转换器.
<!--创建 MyDateConverter 对象-->
<bean id="myDateConverter" class="com.zqc.converter.MyDateConverter"/>
<!--用于注册类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="myDateConverter"/>
</set>
</property>
</bean>
<bean id="good" class="com.zqc.converter.Good">
<property name="name" value="xxx"/>
<property name="birthday" value="2012-12-12"/>
</bean>
三、自定义类型转换器细节
MyDateConverter
中的日期的格式,通过依赖注入的方式,由配置文件完成赋值。
public class MyDateConverter implements Converter<String, Date> {
private String pattern;
@Override
public Date convert(String source) {
Date date = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
date = sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public String getPattern() {
return pattern;
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
}
通过配置文件注入pattern,也就是日期的格式(相当于调用setPattern)。
<!-- 配置文件完成对日期格式的赋值 -->
<bean id="myDateConverter" class="com.zqc.converter.MyDateConverter">
<property name="pattern" value="yyyy-MM-dd"/>
</bean>
注意:ConversionSeviceFactoryBean
定义 id属性,值必须是conversionService
;
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="myDateConverter"/>
</set>
</property>
</bean>
四、Spring日期类型转换器
Spring 框架其实内置了日期类型的转换器:日期格式必须是 2020/05/01
。
<bean id="good" class="com.zqc.converter.Good">
<property name="name" value="xxx"/>
<property name="birthday" value="2012/12/12"/>
</bean>