揭秘Spring类型转换-框架设计的基石.docx

揭秘Spring类型转换-框架设计的基石.docx

? ? 1. 揭秘Spring类型转换 - 框架设计的基石 ? ? 仰不愧天,俯不愧人,内不愧心。关注公众号【BAT的乌托邦】,有Spring技术栈、MyBatis、JVM、中间件等小而美的原创专栏供以免费学习。分享、成长,拒绝浅尝辄止。本文已被 收录。 目录 ?前言 ?正文 Spring类型转换 早期类型转换之PropertyEditor 新一代类型转换接口Converter、GenericConverter 新一代转换服务接口:ConversionService 类型转换整合格式化器Formatter 类型转换底层接口TypeConvert Spring Boot使用增强 ?总结 ?推荐阅读: ?关注A哥? ?前言 你好,我是YourBatman。 Spring Framework是一个现代化的框架,俨然已发展成为Java开发的基石。随着高度封装、高度智能化的Spring Boot的普及,发现团队内越来越少的人知道其深层次机制,哪怕只有一点点。这是让Spirng团队开心,但却是让使用的团队比较担忧的现象。 若运行一个完全黑箱程序无疑像抱着一个定时炸弹,总是如履薄冰、战战兢兢。团队内需要这样的同学来为它保驾护航,惊爆之时方可泰然自诺。所以,你愿意pick吗? 本系列将讨论Spring Framework里贯穿其上下文,具有举足轻重地位的一个模块:类型转换(也可叫数据转换)。 ?正文 Java是个多类型且强类型语言,类型转换这个概念对它来说并不陌生。比如: 自动类型转换(隐式):小类型 - 大类型。eg:int a = 10; double b = a; 强制类型转换(显式):大类型 - 小类型。eg:double a = 10.123; int b = (int)a; 说明:强转有可能产生精度丢失 调用API类型转换:常见的是字符串和其它类型的互转。eg:parseInt(String); parseBoolean(String); JSON.toJSONString(Obj); LocalDate.parse(String) 说明:API可能来自于JDK提供、一方库、二方库、三方库提供 在企业级开发环境中,会遇到更为复杂的数据转换场景,譬如说: 输入/传入一个规格字符串(如1,2,3,4),转换为一个数组 输入/传入一个JSON串(如{name:YourBatman,age:18}),转换为一个Person对象 输入/传入一个URL串(如:C:/myfile.txt、classpath:myfile.txt),转换为一个org.springframework.core.io.Resource对象 虽说数据输入/传入绝大部分都会是字符串(如Http请求信息、XML配置信息),但结构可以千差万别,那么这就必然会涉及到大量的数据类型、结构转换的逻辑。倘若这都需要程序员自己手动编码做转换处理,那会让人望而生畏甚至怯步。 还好我们有Spring。从本文起,A哥就帮你解密Spring Framework它是如何帮你接管类型转换,实现“自动化”的。有了此部分知识的储备,后续再讨论自动化数据绑定、自动化数据校验、Spring Boot松散绑定等,一切都变得容易接受得多。 说明:类型转换其实每个框架都会存在,其中Java领域以Spring的实现最为经典,学会后便可举一反三 Spring类型转换 Spring的类型转换也并非一步到位。完全掌握Spring的类型转换并非易事,需要有一定的脉络按步骤进行。本文作为类型转换系列第一篇文章,将绘制目录大纲,将从以下几个方面逐步展开讨论。 早期类型转换之PropertyEditor 早期的Spirng(3.0之前)类型转换是基于Java Beans接口java.beans.PropertyEditor来实现的(全部继承自PropertyEditorSupport): public interface PropertyEditor { ... // String - Object void setAsText(String text) throws java.lang.IllegalArgumentException; // Object - String String getAsText(); ... } 这类实现举例有: StringArrayPropertyEditor:,分隔的字符串和String[]类型互转 PropertiesEditor:键值对字符串和Properties类型互转 IntegerEditor:字符串和Integer类型互转 … 基于PropertyEditor的类型转换作为一种古老的、遗留下来的方式,是具有一些设计缺陷的,如:职责不单一,类型不安全

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档