【第6章】spring转换器

文章目录

  • 前言
  • 一、手工处理
  • 二、自定义转换器
    • 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]}

总结

回到顶部
官方网站
官方文档
视频学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/617109.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Towards IP Geolocation Using Delay and TopologyMeasurements(TBG)(2006年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:492 Katz-Bassett E, John J P, Krishnamurthy A, et al. Towards IP geolocation using delay and topology …

FreeRTOS创建第一个程序

使用freeRTOS创建任务时使用如下函数 函数的参数 创建一个FreeRTOS任务点亮led灯实现led灯500毫秒翻转一次 具体的代码实现 #include "stm32f10x.h" // Device header #include "Delay.h" #include "freeRTOS.h" #include &quo…

linux进阶篇:性能分析工具: iostat命令详细讲解

Linux 性能分析工具&#xff1a; iostat命令详细讲解 Linux系统出现了性能问题&#xff0c;一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。在一个以前看到系统监控工具&#xff0c;总在想那些监控工具的代理&#xff0c;如何收集系统性能信息&#xff0…

GitHub repository - Pulse - Contributors - Network

GitHub repository - Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津&#xff0c;还是在火热地开发之中&#xff0c;从这里可以一目了然。 2. Contributors 显示对该仓库进行过…

c语言中声明的问题【求个关注!】

文章目录 1 变量的声明与定义&#xff08;1&#xff09;定义与声明的区别&#xff1a;&#xff08;2&#xff09;为什么要区分定义与声明&#xff1f;&#xff08;3&#xff09;extern是什么 ?&#xff08;4&#xff09;举例&#xff1a; 2 函数的声明&#xff1a;函数声明的格…

Springboot整合nacos报错无法连接nacos

报错信息&#xff1a;Nacos com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING 关于这个报错的原因有很多&#xff1a;如Nacos未启动、网络问题、配置问题、版本不兼容问题等&#xff0c;我的报错原因主要是版本不兼容。 下面…

GPT演变:从GPT到ChatGPT

Transformer 论文 Attention Is All You Need The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder… https://arxiv.o…

STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)

目录 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 2.2 设计电路规范 3、代码 4、资料清单 资料下载地址&#xff1a;STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档) 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 经过一个星期的画PCB&#xff0c;今…

C语言: 字符串函数(下)

片头 在上一篇中,我们介绍了字符串函数。在这一篇章中&#xff0c;我们将继续学习字符串函数&#xff0c;准备好了吗&#xff1f;开始咯&#xff01; 1.strncpy函数 1.1 strncpy函数的用法 strncpy是C语言中的一个字符串处理函数&#xff0c;它用于将一个字符串的一部分内容…

[lesson27]二阶构造模式

二阶构造模式 构造函数的回顾 关于构造函数 类的构造函数用于对象的初始化构造函数与类同名并且没有返回值构造函数在对象定义时自动被调用 你该知道的真相 构造函数 只提供自动初始化成员变量的机会不能保证初始化逻辑一定成功执行return语句后构造函数立即结束 构造函数…

学浪已购买视频怎么下载到本地?

许多学习者在学浪购买了丰富的课程&#xff0c;然而&#xff0c;一些课程存在时间限制&#xff0c;使得学习者希望将其下载并永久保存。在这里&#xff0c;我们将介绍一款名为小浪助手的工具&#xff0c;它能够帮助你轻松将学浪已购买的视频下载到本地&#xff0c;让学习变得更…

Python匿名函数4不要

当你需要完成一件小工作时&#xff0c;在本地环境中使用这个函数&#xff0c;可以让工作如此得心应手&#xff0c;它就是Lambda 函数。 Lambda 函数是 Python 中的匿名函数。有些人将它们简称为lambdas&#xff0c;它们的语法如下&#xff1a; lambda arguments: expressionl…