10-Spring自定义类型转化器

前一篇:09-Spring配置文件参数化,抽取properties文件https://blog.csdn.net/fsjwin/article/details/109440615

  • 在spring中是否已经有了日期类型的转换器呢?答案是肯定的有。但是他支持的格式是2020/11/01 并不支持2020-11-01的格式,这样我们在注入的时候就会出现问题。这类我们就来解决这个问题,一点扩面,来掌握自定义类型转换器。

1.使用默认的日期转换器

  1. 实体类
package base.domain;import java.util.Date;/*** @author yuhl* @Date 2020/11/2 10:48* @Classname Student* @Description 主要测试自定义类型转换器* 使用这个配置文件:applicationContext3.xml*/
public class Student {private String name;private Date bir;public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBir() {return bir;}public void setBir(Date bir) {this.bir = bir;}public Student() {}public Student(String name, Date bir) {this.name = name;this.bir = bir;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", bir=" + bir +'}';}
}
  1. 配置文件
   <bean id="student" class="base.domain.Student"><property name="name" value="张三"/><property name="bir" value="2020/11/01"/>bean>
  1. 测试
/*** 自定义类型转换器*/@Testpublic void test20() {ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext3.xml");Student student = (Student)ctx.getBean("student");System.out.println(student);}
  1. 测试结果
Student{name='张三', bir=Sun Nov 01 00:00:00 CST 2020}
  1. 说明问题
    说明spring有自己的日期类型转换器。
  2. 使用我们想用的日期格式,测试的记结果
    在这里插入图片描述

在这里插入图片描述
对于我们想要的日期格式,spring无法处理,好吧。我们自定义类型转换器处理。

2.自定义的日期转换器展示自己想用的日期格式

  1. 实体类
    不变
  2. 配置文件
<bean id="student" class="base.domain.Student"><property name="name" value="张三"/><property name="bir" value="2020-11-01"/>
bean><bean id="myDateConvert" class="base.convert.MyDateConvert">bean><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters" ref="myDateConvert"/>
bean>
  1. 写自己的类型转换器
package base.convert;import org.springframework.core.convert.converter.Converter;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*** @author yuhl* @Date 2020/11/2 11:00* @Classname MyDateConvert* @Description 自定义日期类型转换器*/
public class MyDateConvert implements Converter<String, Date> {@Overridepublic Date convert(String source) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = sdf.parse(source); //解析string->Date} catch (ParseException e) {e.printStackTrace();}return date;}
}
  1. 测试结果
Student{name='张三', bir=Sun Nov 01 00:00:00 CST 2020}
  1. 说明问题
    使用自己的日期格式,因为配置了日期转换器,所以可以正常解析日期格式。

3.总结和注意点

注意:
使用装换气的FactoryBean(ConversionServiceFactoryBean)是id必须是conversionService,没有商量,为什么?因为spring底层会按这个id去扫描这个FactoryBean,拿到这个bean之后会把把里面的Filed converters加载为我们的ref bean。完成自定义类型转换器的注册。

总结:
自定义类型转化器.

- 实现转换器接口
    <bean id="myDateConvert" class="base.convert.MyDateConvert">bean>
- 注册到spring中	
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters" ref="myDateConvert"/>
bean>
- 即可正常使用
Student{name='张三', bir=Sun Nov 01 00:00:00 CST 2020}

获得正常结果。
下一篇:11-Spring的后置处理器BeanPostProcesses https://blog.csdn.net/fsjwin/article/details/109458672


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部