Spring 3.2.x 和 Java 8

Spring 3.2.x with Java 8

我们目前正在使用 spring 3.2.9。我们正在考虑将其升级到更新版本。当我查看文档时,它说

Along with 4.0 M1, we’ve released Spring Framework 3.2.3, containing fixes for recently reported issues but also coming with OpenJDK 8 runtime support. Spring Framework 3.2.x will support deployment on JDK 8 runtimes for applications compiled against JDK 7 (with -target 1.7) or earlier.

这是否意味着我无法在 Java 8 上编译?
如果我想用 Java 8 编译,我应该使用 spring 版本 4.0.x 吗?

早于 4.0M1 的 Spring 框架版本不适用于为 Java 8.

编译的 classes

Spring 尝试通过读取 class 文件来代理这些 classes,如果它们是 "too new",这将不起作用。如果您的 @Service classes 是使用 Java 8 作为目标编译的,Spring 将无法在启动时加载 classes。

这意味着如果您想要以 Java 8 为目标(并使用 lambda、默认实现等),则必须升级到 Spring 4.x.x。

我几个月前在一个使用 Spring 3.x.x.

的项目中遇到了这个问题

从 3.2.9+ 开始,在 3.2.x 行中有对 JDK8 的最大支持。

有关 3.2.10 中字节码支持的改进,请参阅 SPR-11656 for initial support in 3.2.9 and SPR-11979。请注意评论中解释的支持限制。

全面支持JDK8,请升级到Spring 4.x - 有一个dedicated wiki page explaining the upgrade path,Spring团队努力使升级体验真正简单。

根据我的观察,只要不使用新的 java8 语法,您实际上可以将 spring 3 与 Java 8 中编译的代码一起使用 在扫描的路径中 (如 lambda)。

因此,您可以使用新的 API(流...),但不能使用新的语法(lambdas...)。

当我尝试时,我以 org.springframework.beans.factory.BeanDefinitionStoreException 之类的启动错误告终:无法读取候选组件 class