文章目录
- 前言
- 一、手工处理
- 二、自定义转换器
- 1. 新建bean
- 2. 新建转换器类
- 3. spring配置
- 4. 测试
- 5. 测试结果
- 总结
前言
不知道大家有没有注意到,我们【第4章】依赖注入和自动装配
,我们注入了String、Integer、Date等类型的参数,其实都是通过配置value标签注入的,本质上都一样,那是哪个地方替我们做了转化呢?答案是spring内置的转换器,下面就让我们来一起了解一下吧。
一、手工处理
原来的注入自己在set方法做了单独处理
package org.example.di;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;/*** Create by zjg on 2024/3/30*/
public class Book {private List<Date> upgradeDate;public Book() {}public List<Date> getUpgradeDate() {return upgradeDate;}//其实在这个地方对List中的Date进行了转换,但是这样的改动后面有其他地方用到set方法,会有歧义public void setUpgradeDate(List<String> upgradeDate) throws ParseException {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");List<Date> dateList=new ArrayList<>();for(String date:upgradeDate){dateList.add(sdf.parse(date));}this.upgradeDate=dateList;}
}
二、自定义转换器
内置的转换器了解即可,接下来我们自定义转换器完成List<String>到List<Date>的转换
1. 新建bean
package org.example.di;import java.util.Date;
import java.util.List;/*** Create by zjg on 2024/4/12*/
public class Book1 {private List<Date> upgradeDate;public List<Date> getUpgradeDate() {return upgradeDate;}public void setUpgradeDate(List<Date> upgradeDate) {this.upgradeDate = upgradeDate;}@Overridepublic String toString() {return "Book1{" +"upgradeDate=" + upgradeDate +'}';}
}
2. 新建转换器类
package org.example.converter;import org.springframework.core.convert.converter.Converter;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** Create by zjg on 2024/4/12*/
public class MyDateConverter implements Converter<List<String>, List<Date>> {@Overridepublic List<Date> convert(List<String> source) {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");List<Date> list=new ArrayList<>();try {for(String date: source){list.add(sdf.parse(date));}} catch (ParseException e) {throw new RuntimeException(e);}System.out.println(list);return list;}
}
3. spring配置
参数值要和转换器格式保持一致
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--Converter--><bean id="myDateConverter" class="org.example.converter.MyDateConverter"></bean><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><ref bean="myDateConverter"/></set></property></bean><bean id="book01" class="org.example.di.Book1"><property name="upgradeDate"><list><value>2024-03-29 22:15:00</value><value>2024-03-30 22:15:10</value><value>2024-03-31 22:15:20</value></list></property></bean>
</beans>
4. 测试
public class Main {public static void main(String[] args) {//ConverterClassPathXmlApplicationContext converter=new ClassPathXmlApplicationContext("springConverter.xml");System.out.println(converter.getBean("book01", Book1.class));}
5. 测试结果
Book1{upgradeDate=[Fri Mar 29 22:15:00 CST 2024, Sat Mar 30 22:15:10 CST 2024, Sun Mar 31 22:15:20 CST 2024]}
总结
回到顶部
官方网站
官方文档
视频学习