Spring Framework 5.3.9 和 5.2.16 现已推出
北京时间7月14日,Spring Framework推出 5.3.9 和 5.2.16 两个新版本。Spring Framework5.3.9包括45 个修复和改进。Spring Framework5.2.16包括12 个选定的修复和改进。
随着越来越多的人使用Spring Boot 逐渐忽略了Spring Framework的关注,其实两者的关系密不可分,对Spring Boot 如果想要能研究得更深入,那么,就需要对Spring Framework有更足够的了解和应用。
一、介绍Spring Framework
Spring 使创建 Java 企业应用程序变得容易。它提供了在企业环境中使用 Java 语言所需的一切,支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需要灵活地创建多种架构。从 Spring Framework 5.1 开始,Spring 需要 JDK 8+(Java SE 8+)并为 JDK 11 LTS 提供开箱即用的支持。建议将 Java SE 8 update 60 作为 Java 8 的最低补丁版本,但通常建议使用最新的补丁版本。
Spring 支持广泛的应用场景。在大型企业中,应用程序往往存在很长时间,并且必须运行在升级周期不受开发人员控制的JDK和应用程序服务器上。其他可能作为嵌入服务器的单个 jar 运行,可能在云环境中。还有一些可能是不需要服务器的独立应用程序(例如批处理或集成工作负载)。
Spring 是开源的。它拥有一个庞大而活跃的社区,可根据各种实际用例提供持续的反馈。这帮助 Spring 在很长一段时间内成功发展。
二、Spring Framework 与Spring Boot的版本对应关系
| Spring boot 版本 | Spring Framework | jdk 版本 | maven 版本 |
|---|---|---|---|
| 1.5.0.RELEASE | 4.3.6.RELEASE | 7 | 3.2+ |
| 1.5.2.RELEASE | 4.3.7.RELEASE | 7 | 3.2+ |
| 1.5.3.RELEASE | 4.3.8.RELEASE | 7 | 3.2+ |
| 1.5.4.RELEASE | 4.3.9.RELEASE | 7 | 3.2+ |
| 1.5.5.RELEASE | 4.3.10.RELEASE | 7 | 3.2+ |
| 1.5.7.RELEASE | 4.3.11.RELEASE | 7 | 3.2+ |
| 1.5.8.RELEASE | 4.3.12.RELEASE | 7 | 3.2+ |
| 1.5.9.RELEASE | 4.3.13.RELEASE | 7 | 3.2+ |
| 2.0.0.RELEASE | 5.0.2.RELEASE | 8 | 3.2+ |
| 2.1.*.RELEASE | 5.1.*.RELEASE | 8 | 3.2+ |
| 2.2.*.RELEASE | 5.2.*.RELEASE | 8 | 3.3+ |
| 2.3.*.RELEASE | 5.2.*.RELEASE | 8+ | 3.3+ |
| 2.4.* | 5.3.* | 8+ | 3.3+ |
| 2.5.* | 5.3.* | 8+ | 3.3+ |
| 2.6.* | 5.3.* | 8+ | 3.3+ |
三、主要更新内容
5.3.9
3.1 新的功能
- 配置 CommonsMultipartResolver 以支持特定的 HTTP 方法#27161
- 允许 BeanDefinitionBuilder 使用ResolvableType设置实例供应商#27160
@ResponseStatusMessageSource 未解决 on handler 方法的原因#27156- ResourceHandlerRegistry#getHandlerMapping 应该在外循环中初始化一次处理程序#27153
- 使用 BeanDefinitionBuilder 设置合成标志#27141
- BeanCreationException 错误消息应始终包括声明构造函数(或工厂方法)类#27139
- 改进 Jetty 10 检查 JettyClientHttpResponse #27136
- Jetty10RequestUpgradeStrategy 使用旧的码头 9 类 HandshakeRFC6455 #27121
- 使用 Jetty 10 及其反应式客户端的 ClassNotFoundException #27112
- 尽可能使用 StringBuilder.append(char) #27098
- 考虑“wss”和“https”作为转发标头检查中的安全标志#27097
- SynchronossPartHttpMessageReader 应仅在需要时创建临时目录#27092
- 在 BeanMethod 和 *Metadata 类型中实现 equals、hashCode 和 toString #27076
- 删除 BeanUtils 中的日志依赖#27070
- 从自动代理中排除密封接口(为了兼容 JDK 17)#27027
- 使用 TransactionOperator 运行事务时出现 Blockhound 错误#26955
- 配置 StandardServletMultipartResolver 以仅支持 multipart/form-data #26826
- 添加一种从 ThreadPoolTaskScheduler 设置 executeExistingDelayedTasksAfterShutdown 的方法#26719
- 在设置本地值之前在 ThreadPoolTaskExecutor 中应用动态更改#26700
3.2 Bug修复
- JettyHttpHandlerAdapter 不知道 Server[Request|Response]Wrapper #27146
- {*path} 模式 (CaptureTheRestPathElement) 在
@PathVariable路径#27132 中包含未记录的前导斜杠 - 在 jetty 10 中调用 JettyWebSocketSession.getRemoteAddress 时出现 NoSuchMethodError #27120
- CronExpression在 spring-context-5.3.8 上仍然被破坏#27117
- SimpleMethodMetadataReadingVisitor.Source.toString() 省略了方法参数的分隔符#27095
- DefaultPathSegment 允许改变共享的空参数映射#27064
- 使用 proxyTargetClass=true 的 AOP 自动代理和介绍建议不适用于 JDK 代理目标#27044
- ServletRequestDataBinder 假定标准 servlet 多部分处理#26999
- DataClassRowMapper 不应覆盖 Kotlin 初始化属性#26569
3.3 文档
- 将 Javadoc 添加
@since到BeanDefinitionBuilder.setSynthetic()#27155 - 修复指向 Javadoc API 的链接#27151
- 添加了 HandlerInterceptor 的描述#27122
- 修复 core-beans.adoc 中的错字#27113
- 修复 BeanDefinitionDsl.kt 中的错字#27105
- 改进 ContentCachingRequestWrapper 的 getContentAsByteArray 方法的文档#27068
- 修复了参考文档#27067 中内容协商默认设置的解释
@Valid*在参考手册中记录任何注释都会触发验证#27050- 改进 RequestPartMethodArgumentResolver Javadoc #27043
- 改进 RequestResponseBodyMethodProcessor Javadoc #27042
- 澄清 ResourceBundleMessageSource 中的 baseName 不支持多个位置#27038
- 链接替代文档格式#27015
3.4 依赖升级
- 适配 HtmlUnit 2.51 #27147
- 升级至 ASM 9.2 (for early Java 18 support) #27069
- 升级至 Kotlin 1.5.21 #27110
- 升级至 Kotlin Coroutines 1.5.1 #27157
- 升级至 Mockk 1.11.0 #27109
- 升级至 Reactor 2020.0.9 #27158
四、 应用案例
MateCloud是基于Spring Cloud和Spring Boot的低代码快速开发平台,底层基于Spring Framework.
