- Published on
Spring 常用组件源码分析
Spring 常用组件源码分析
1. Spring 类型转换机制
Spring 提供了强大的类型转换机制,用于处理各种数据类型之间的转换。本节将深入分析 Spring 的类型转换实现原理。
1.1 类型转换体系
Spring 3.0 引入了全新的类型转换机制,提供了三种类型转换器:
- Converter: 处理 1:1 的类型转换
- ConverterFactory: 处理 1:N 的类型转换
- GenericConverter: 处理 N:N 的类型转换
特别强调:转换器的注册顺序非常重要,这决定了通用转换器的匹配结果(谁在前,优先匹配谁)。
1.2 统一类型转换服务 (ConversionService)
Spring 的类型转换服务由以下几个核心组件组成:
核心接口/类
- ConverterRegistry: 转换器注册中心,负责转换器的注册和删除
- ConversionService: 统一的类型转换服务,面向开发者的门面接口
- ConfigurableConversionService: ConverterRegistry 和 ConversionService 的组合接口
- GenericConversionService: 实现了注册管理和转换服务的核心功能
- DefaultConversionService: 继承自 GenericConversionService,注册了默认转换器
类型转换服务架构
1.3 Spring 日期格式化
Spring 的日期格式化功能基于 JDK 的 java.text.DateFormat
(实际为 SimpleDateFormat
)实现。
日期格式化流程
JSR 310 日期时间类型
Java 8 引入了一套全新的时间日期 API,位于 java.time
包中。这些类都是不可变且线程安全的:
- Instant: 时间戳
- LocalDate: 不含具体时间的日期(如:2020-12-12)
- LocalTime: 不含日期的时间(如:18:00:00)
- LocalDateTime: 包含日期和时间,无时区信息
- ZonedDateTime: 包含时区的完整日期时间
- Timezone: 时区(使用 ZoneId 表示)
辅助类:
- Year
- Month
- YearMonth
- MonthDay
- Duration
- Period
建议:对于新项目或新代码,建议完全禁用
java.util.Date
类型,使用 JSR 310 的新日期时间 API。