Loading

第十二章 自定义类型转换器

1.类型转换器

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

image

2.自定义类型转换器

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

image

  • 实现Converter<s,t>接口

    public class MyDateConverter implements Converter<String, Date> {
    
        /*
            convert:将String类型转换为Date
            param:source 代表配置文件中的日期字符串
            return:Date 返回Date类型,让Spring拿到转换后的数据
         */
        @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配置文件中进行配置

    • 将MyDateConverter对象创建出来

      <bean id="myDateConverter" class="com.dong.converter.MyDateConverter"/>
      
    • 类型转换器的注册

      目的:告知Spring框架,MyDateConverter是一个类型转换器
      	将MyDateConverter注入conversionService
      <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
          <property name="converters">
              <set>
                  <ref bean="myDateConverter"/>
              </set>
          </property>
      </bean>
      

3.细节

  • MyDateConverter中的日期格式, 可以通过依赖注入的方式, 由配置文件完成赋值

    public class MyDateConverter implements Converter<String, Date> {
        private String pattern;
    
        public String getPattern() {
            return pattern;
        }
    
        public void setPattern(String pattern) {
            this.pattern = pattern;
        }
    
        /*
                convert:将String类型转换为Date
                param:source 代表配置文件中的日期字符串
                return:Date 返回Date类型,让Spring拿到转换后的数据
             */
        @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;
        }
    }
    
    <bean id="myDateConverter" class="com.dong.converter.MyDateConverter">
        <property name="pattern" value="yyyy-MM-dd"/>
    </bean>
    
  • ConversionServiceFactoryBean定义的id属性值必须是 conversionService

  • Spring框架内置了日期类型装换器, 但格式有要求

    日期格式: 2022/04/16  (不支持: 2022-4-16)
    
posted @ 2022-07-21 00:32  苏无及  阅读(85)  评论(0编辑  收藏  举报