为了账号安全,请及时绑定邮箱和手机立即绑定

Spring 版本 4.3.20 是否适用于 Java 11?

Spring 版本 4.3.20 是否适用于 Java 11?

芜湖不芜 2022-06-23 16:48:41
当谈到 spring 4.3.20 支持的 java 版本时,我感到很困惑。将 Spring 4.3.20 项目更新到 Java 11 没有任何问题。我所有的测试工作正常,webapp 启动,Spring 的所有需要字节码魔法的功能都可以@Cacheable正常工作。这怎么可能?据我了解,我应该更新到 Spring 5+。我检查了我的 Maven 设置中的语言级别和生成的.class-files 的字节码版本,它们确实使用major version: 55.我错过了什么?我使用 Java 11 构建并使用 Java 11 启动本地 tomcat。我仔细检查了所有设置并用于visualvm验证 tomcat 确实可以使用 Java 11 运行。继承人的输出javap:
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

Spring 5.1 支持 Java 11,早期版本不支持。请参阅Spring 框架版本

JDK 版本范围

  • Spring 框架 5.1.x:JDK 8-12

  • Spring 框架 5.0.x:JDK 8-10

  • Spring Framework 4.3.x:JDK 6-8

以及Spring Framework 5.x 中的新增功能

5.1 版的新功能

一般核心修订

  • 基础设施:

    • 在类路径和模块路径上对 JDK 11 的无警告支持。

4.3.x 适用于 Java 11 可能只是意味着您到目前为止很幸运(没有使用与 Java 11 不兼容的东西)。此外,Java 在向后兼容性方面也相当不错,即使从 Java 9 开始删除或有意的向后不兼容更改,Spring 中真正损坏的东西完全有可能非常小且晦涩难懂。

也就是说,如果作者说 Java 兼容性仅在您使用的更高版本中得到保证,我不会使用 Java 11 那样庞大的 Spring 库集。如果您想在 Java 11 中使用 Spring,请升级到 Spring 5.1。


查看完整回答
反对 回复 2022-06-23
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

请记住:测试只能证明错误的存在,而不是它们的缺失。

根据他们发布博客上的一些评论,4.3.20 实际上与 Java 11“不兼容”。

另一方面:spring 是一个巨大的框架。因此,简单的答案可能是:只要您不遇到无法工作的区域,它就可以工作。

请记住:任何版本 N 的 JDK 都可以为具有旧版本 Nx 的字节码运行字节码。


查看完整回答
反对 回复 2022-06-23
?
守候你守候我

TA贡献1802条经验 获得超10个赞

似乎兼容性是社区中的一个常见问题,因此在 Spring 文档中有一个答案(有点):https ://spring.io/blog/2015/04/03/how-spring-achieves-compatibility-with-java -6-7-8

基本上,Spring 代码库本身甚至不使用 Java 7 的特性,因此它与 6 兼容。

至于字节码转换,我相信 JVM 保持了一定程度的兼容性,因为它的规范允许框架的一些特性工作。

但是,如果官方文档说它不兼容,那么你应该相信这个意外,因为其他功能可能无法工作或被补丁和次要版本破坏。

PS您还提到cglib了可以用来操作字节码,但实际上并不是必需的。它生成的 Java 代码甚至字节码在新的 JVM 版本中总是向后兼容。


查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 252 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信