类型转换器
作用:Spring通过类型转换器把配置文件中字符串类型的数据格式,转换成对象中成员变量对应的数据类型,从而完注入。
自定义类型转换器
产生原因:当Spring内部没有提供特定的类型转换器的时候,而程序员在应用的过程中还需要使用,那么程序员就需要自定义类型转换器。
开发步骤:
- 实现Converter接口
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;
}
}
- 在 Spring 的配置文件中进行配置
<!-- 1、先创建MyDateConverter对象,再注册类型转换器 -->
<bean id="myDateConverter" class="com.bearjun.converter.MyDateConverter"/>
<!-- 2、类型转换器的注册:告知spring,我们创建的myDateConverter是一个类型转换器 -->
<!-- id必须是conversionService,ConversionServiceFactoryBean 是spring的工厂转换器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="myDateConverter"/>
</set>
</property>
</bean>
ConversionServiceFactoryBean接口如下:
由图可知,ConversionServiceFactoryBean实现了FactoryBean和InitializingBean,由此可知,上述的代码的converters是一个set集合,而且当spring工厂初始化的时候,会自动调用我们类型转换器。
注意的细节
- ConversionServiceFactoryBean对象的id必须是conversionService
- spring其实已经提供了日期转换器,但是默认的日期格式为yyyy/MM/dd
- 日期格式可以在配置文件中定义一个参数,通过set注入,减小程序之间的耦合性
public class MyDateConverter implements Converter<String, Date> {
private String pattern;
// 省略部分代码
}
<bean id="myDateConverter" class="com.bearjun.convert.MyDateConvert">
<property name="pattern" value="yyyy-MM-dd"/>
</bean>
评论区