当涉及到 spring 4.3.20 支持的 java 版本时,我感到很困惑。将 Spring 4.3.20 项目更新到 Java 11 时没有任何问题。我所有的测试都工作正常,webapp 启动了,所有需要像 @Cacheable
这样的字节码魔术的 Spring 功能都可以工作。这怎么可能?据我了解,我应该更新到 Spring 5+。我检查了我的 Maven 设置中的语言级别和生成的 .class
文件的字节码版本,它们确实使用了 major version: 55
。
我错过了什么?
我使用 Java 11 构建并使用 Java 11 启动本地 tomcat。我仔细检查了所有设置并使用 visualvm
验证 tomcat 确实使用 Java 11 运行。
这是 javap
的输出:
Spring 5.1 支持 Java 11,早期版本不支持。参见 Spring Framework Versions :
JDK Version Range
- Spring Framework 5.1.x: JDK 8-12
- Spring Framework 5.0.x: JDK 8-10
- Spring Framework 4.3.x: JDK 6-8
和What's New in Spring Framework 5.x :
What's New in Version 5.1
General Core Revision
- Infrastructure:
- Warning-free support for JDK 11 on the classpath and the module path.
4.3.x 在 Java 11 上运行可能只是意味着你到目前为止很幸运(没有使用与 Java 11 不兼容的东西)。此外,Java 在向后兼容性方面非常好,即使自 Java 9 以来删除了一些东西或有意向后不兼容的更改,Spring 中真正损坏的东西也完全有可能非常小和晦涩。
也就是说,如果作者说 Java 兼容性只能在比您使用的更高版本中得到保证,我就不会在 Java 11 中使用像 Spring 这样庞大的库集。如果您想将 Spring 与 Java 11 一起使用,请升级到 Spring 5.1。