【Spring】自定义类型转换器

44 篇文章 1 订阅
本文介绍了Spring框架中的类型转换器如何将配置文件中的字符串转换为对象成员变量的对应类型,以及在Spring内没有内置特定类型转换器时如何自定义转换器。详细阐述了自定义类型转换器的实现,包括实现Converter接口和配置文件注册,并举例展示了自定义Date转换器的使用。同时,讨论了自定义转换器的细节,如注入日期格式,并提供了Spring内置日期转换器的注意事项。
摘要由CSDN通过智能技术生成


一、类型转换器

作用: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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天边星宿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值