侧边栏壁纸
  • 累计撰写 98 篇文章
  • 累计创建 85 个标签
  • 累计收到 9 条评论

spring系列笔记 - 第⼗⼆章 自定义类型转换器

bearjun
2021-07-05 / 0 评论 / 0 点赞 / 594 阅读 / 1,775 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-07-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

类型转换器

作用:Spring通过类型转换器把配置文件中字符串类型的数据格式,转换成对象中成员变量对应的数据类型,从而完注入。

13862-k2aqx73fsu.png

自定义类型转换器

产生原因:当Spring内部没有提供特定的类型转换器的时候,而程序员在应用的过程中还需要使用,那么程序员就需要自定义类型转换器。

41465-k4cu3vmu78j.png

开发步骤:

  • 实现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接口如下:
48228-7yqrupvddcn.png
由图可知,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>
0

评论区