1.什么是类型转换器?我们在xml文件中设置注入的值都是以字符串的形式写的,那么假设我有一个Integer类型的类的成员变量,但是我可以注入吗?String类型的变量和Integer类型的变量之间是否存在转换?功能:Spring通过类型转换器将配置文件中字符串类型的数据转换为对象中成员变量对应类型的数据,然后完成注入备注:这个Converter就是所谓的类型转换器接口,但是为什么它是一个接口?大家可以想一想,String类型可以转换为其他八种基本类型,那么不同类型的转换方式肯定是不一样的,所以是以接口的形式来完成的。2.自定义类型转换器2.1为什么需要自定义类型转换?设备?首先说明一下,Spring本身提供的原生类型转换器并不是万能的。例如,如果你有一个Date类型,不同的国家有不同的日期书写方式。老梅喜欢2022/02/15,中国喜欢2022-02-15,所以Spring不可能给你提供这么个性化的转换器,需要你自己定义。2.2如何开发自定义类型转换器?第一步:创建一个类,实现Converter接口,其中S为原始数据类型,T为待转换数据类型,如下publicclassMyDateConverterimplementsConverter{/***以下方法为自定义类型转换器*@params数据源=>如Spring配置文件中的2022-02-16*@return需要转换的数据=>这个返回值会自动帮我们把转换后的值注入到类的成员变量中*/@OverridepublicDateconvert(Strings){Datedate=null;尝试{SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");日期=sdf.解析(s);}catch(ParseExceptione){e.printStackTrace();}归期;}}步骤2:注入Spring的类型转换器类并注册自定义类型转换器(将您的转换器告诉Spring)=========================注意:这个id的声明必须是conversionService,否则声明后报错标签里面相应的类型转换器,Spring会取配置文件的值。如果它发现要注入的值是Date类型,那么它就会遵循自定义类型转换器的逻辑。将配置文件的String类型转换为Date类型第三步:注入具体类型使用的类(这里是Date类型)beanid="person"class="cn.paul.spring.demo.hellospring.entity.Person">2.3自定义类型转换器的一些细节2.3.1首先:依赖它,注入它,写配置文件,我们会发现自定义类型转换器里面写的格式是硬编码的,很明显是耦合的,所以我们需要把它写到配置文件中,达到解耦的效果。首先,我们需要将变量提取为类的成员变量,并在配置文件中设置并注入publicclassMyDateConverterimplementsConverter{privateStringpattern;publicvoidsetPattern(Stringpattern){这个。模式=模式;}/***下面这个方法是自定义类型转换器*@params数据源=>比如Spring配置文件中的2022-02-16*@return想要转换后的数据=>这个return返回值会自动帮我们把转换后的值注入到类的成员变量中*/@OverridepublicDateconvert(Strings){Datedate=null;尝试{SimpleDateFormatsdf=newSimpleDateFormat(pattern);日期=sdf.parse(s);}catch(ParseExceptione){e.printStackTrace();}归期;}}======下面是配置文件的set注入=========备注:当我想更改其他日期格式时,直接在配置文件中更改即可2.3.2ConversionSeviceFactoryBean定义id属性的值必须是conversionService,这是约定好的。2.3.3其实Spring有它内置的日期格式转换器,但是配置文件中的日期格式需要是:yyyy/MM/dd也就是说如果我们没有上面自定义的日期类型转换,只配置中写了日期格式为yyyy/MM/dd类型,可以转为Date类型注入到对象中