使用Java 8的Spring 3.2.x.

我们目前正在使用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版吗?

从3.2.x开始,3.2.x系列中有JDK8的尽力支持。

有关3.2.9中的初始支持,请参阅SPR- 11656;有关3.2.10中的字节码支持改进,请参阅SPR- 11979 。 请注意评论中解释的支持限制。

要获得对JDK8的全面支持,请升级到Spring 4.x – 这是一个专门的维基页面,解释了升级路径 ,Spring团队努力使升级体验变得非常简单。

早于4.0M1的Spring Framework版本不适用于为Java 8编译的类。

Spring尝试通过读取类文件来代理这些类,如果它们“太新”则无法工作。 如果您的@Service类是使用Java 8作为目标编译的,那么Spring将无法在启动时加载类。

这意味着如果要定位Java 8(并使用lambdas,默认实现等),则必须升级到Spring 4.xx.

我几个月前在一个使用Spring 3.xx的项目中遇到了这个问题

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

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

当我尝试时,我最终遇到org.springframework.beans.factory.BeanDefinitionStoreException这样的启动错误:无法读取候选组件类