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

当谈到 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


http://img.mukewang.com/62b4290f00017d0905280163.jpg

芜湖不芜
浏览 253回答 3
3回答

胡说叔叔

Spring 5.1 支持 Java 11,早期版本不支持。请参阅Spring 框架版本:JDK 版本范围Spring 框架 5.1.x:JDK 8-12Spring 框架 5.0.x:JDK 8-10Spring 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。

德玛西亚99

请记住:测试只能证明错误的存在,而不是它们的缺失。根据他们发布博客上的一些评论,4.3.20 实际上与 Java 11“不兼容”。另一方面:spring 是一个巨大的框架。因此,简单的答案可能是:只要您不遇到无法工作的区域,它就可以工作。请记住:任何版本 N 的 JDK 都可以为具有旧版本 Nx 的字节码运行字节码。

守候你守候我

似乎兼容性是社区中的一个常见问题,因此在 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 版本中总是向后兼容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java