一、发布说明
北京时间10月15日,Spring Framework推出 5.3.11 和 5.2.18 两个新版本。Spring Framework5.3.11包括32 个修复和改进。Spring Framework5.2.18包括10个选定的修复和改进。
随着越来越多的人使用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.11版本的更新内容,5.2.18请自行查看官网
4.1 新特性
- 增强 DefaultResponseErrorHandler 以允许记录完整的错误响应正文 #27552
- 在 CookieAssertions 失败消息中包含正确的关键字 #27550
- 在 ByteArrayResource.hashCode() 中使用 Arrays.hashCode() #27544
- 通过系统属性允许默认的 CacheAwareContextLoaderDelegate 配置 #27540
- 直接调用 bean 派生的 (Auto)Closeable.close() 方法 #27504
- JDK 9+ 的 JNDI API 防御性参考(可选java.naming模块)#27483
- 当消费者任务被拒绝时 DefaultMessageListenerContainer 不会记录错误/警告 #27451
- 在 externallyManaged RootBeanDefinition 属性上提供访问器 #27449
- 允许在CglibAopProxyvia #27439 中避免类验证ProxyFactory
- 添加对非公共记录声明的支持 #27437
- 为格式错误的 HTTP 响应发出 WebClientResponseException #27262
- 如果当前连接的自动提交设置为 false,则 DatabasePopulatorUtils.execute 应该提交 #27008
4.2 BUG修复
- CronTrigger 使用 new Date() 而不是上下文的时钟#27546
- 在 AbstractFileResolvingResource.isReadable() 下载巨大的 jars 以检查组件长度时 con.getContentLengthLong() 的性能影响 #27541
- ResourceUrlEncodingFilter 对 HttpServletResponse#encodeURL 的性能影响 #27538
- UriTemplateRequestEntity 不会覆盖 hashCode() 和 equals() #27531
- DataBufferUtils.write 丢失上下文#27517
- 避免在 <cache:annotation-driven /> 中重复注册 JCacheOperationSource bean #27499
- 使用 Java 17 生成代理失败,并显示“无法调用“Object.getClass()”,因为“cause”为空” #27490
- MediaType.sortBySpecificityAndQuality 抛出 java.lang.IllegalArgumentException:比较方法违反其一般约定 #27488
- 读取 SSE 响应时删除前导空格 #27473
- RegEx 中的非转义右花括号导致 Android 上的初始化错误 #27467
- ConcurrentReferenceHashMap 的 entrySet 违反了 Map 契约 #27454
- 避免在 StandardBeanExpressionResolver 中提前确定 ConversionService #27446
- Spring Framework >= 5.3.8 由于 InputStream 优化,ASM ClassReader 无法解析类文件 #27429
- StringUtils.collectionToDelimitedString(?) 当集合包含 null 时失败并出现 NullPointerException #27419
- Spring HATEOAS 在 WebFlux 中使用 Kotlin 协程和 ResponseEntity 导致 406 #27292
4.3 文档
删除关于缺少缓存 API 的评论。#27501
4.4 依赖升级
- Upgrade to JUnit 5.8.1 #27450
- Upgrade to Reactor 2020.0.12 #27527
- Upgrade to SmallRye Mutiny 1.1.1 #27555
详细请点击官网地址查看:Spring Framework 5.3.11 and 5.2.18 available now