北京时间7月14日,Spring Framework推出 5.3.9
和 5.2.16
两个新版本。Spring Framework 5.3.9
包括[45 个修复和改进]。Spring Framework 5.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的版本对应关系
三、主要更新内容
5.3.9
3.1 新的功能
- 配置 CommonsMultipartResolver 以支持特定的 HTTP 方法
- 允许 BeanDefinitionBuilder 使用[ResolvableType]设置实例供应商
-
@ResponseStatus
MessageSource 未解决 on handler 方法的原因 - ResourceHandlerRegistry#getHandlerMapping 应该在外循环中初始化一次处理程序
- 使用 BeanDefinitionBuilder 设置合成标志
- BeanCreationException 错误消息应始终包括声明构造函数(或工厂方法)类
- 改进 Jetty 10 检查 JettyClientHttpResponse
- Jetty10RequestUpgradeStrategy 使用旧的码头 9 类 HandshakeRFC6455
- 使用 Jetty 10 及其反应式客户端的 ClassNotFoundException
- 尽可能使用 StringBuilder.append(char)
- 考虑“wss”和“https”作为转发标头检查中的安全标志
- SynchronossPartHttpMessageReader 应仅在需要时创建临时目录
- 在 BeanMethod 和 *Metadata 类型中实现 equals、hashCode 和 toString
- 删除 BeanUtils 中的日志依赖
- 从自动代理中排除密封接口(为了兼容 JDK 17)
- 使用 TransactionOperator 运行事务时出现 Blockhound 错误
- 配置 StandardServletMultipartResolver 以仅支持 multipart/form-data
- 添加一种从 ThreadPoolTaskScheduler 设置 executeExistingDelayedTasksAfterShutdown 的方法
- 在设置本地值之前在 ThreadPoolTaskExecutor 中应用动态更改
3.2 Bug修复
- JettyHttpHandlerAdapter 不知道 Server[Request|Response]Wrapper
- {*path} 模式 (CaptureTheRestPathElement) 在
@PathVariable
路径包含未记录的前导斜杠 - 在 jetty 10 中调用 JettyWebSocketSession.getRemoteAddress 时出现 NoSuchMethodError
- CronExpression在 spring-context-5.3.8 上 仍然 被破坏
- SimpleMethodMetadataReadingVisitor.Source.toString() 省略了方法参数的分隔符
- DefaultPathSegment 允许改变共享的空参数映射
- 使用 proxyTargetClass=true 的 AOP 自动代理和介绍建议不适用于 JDK 代理目标
- ServletRequestDataBinder 假定标准 servlet 多部分处理
- DataClassRowMapper 不应覆盖 Kotlin 初始化属性
3.3 文档
- 将 Javadoc 添加
@since
到BeanDefinitionBuilder.setSynthetic()
- 修复指向 Javadoc API 的链接
- 添加了 HandlerInterceptor 的描述
- 修复 core-beans.adoc 中的错字
- 修复 BeanDefinitionDsl.kt 中的错字
- 改进 ContentCachingRequestWrapper 的 getContentAsByteArray 方法的文档
- 修复了参考文档内容协商默认设置的解释
-
@Valid*
在参考手册中记录任何注释都会触发验证 - 改进 RequestPartMethodArgumentResolver Javadoc
- 澄清 ResourceBundleMessageSource 中的 baseName 不支持多个位置
- 链接替代文档格式
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