抢占先机
VMware 提供培训和认证,以加速您的进步。
了解更多我相信大多数读者都知道,Java SE 8 上个月发布了。 结合 最近发布的 STS 3.5.0 及其对 JDK 8 的完全支持,我们认为现在是将 Sagan 升级到利用新语言特性和 API 的理想时机。
注意:还不熟悉 Sagan 项目? 它是 Spring 参考应用程序,为本博客和 spring.io 上的所有内容提供支持。 查看本系列中的 第一篇 三篇 文章 以获取更多详细信息。
Cloud Foundry 的 Java buildpack 自发布之日起就提供对 JDK 8 的支持。 要开始使用它,我们 创建了我们自己的 buildpack 分支,将 JDK 版本 从 1.7.0 提升到 1.8.0,并 配置了我们的 Gradle 构建,以便在将 Sagan 部署到生产环境时使用我们的分支。
注意:在不久的将来,1.8.0 将成为 Cloud Foundry 构建包的默认版本,并且不再需要上述分叉。
您可能已经注意到,Sagan 使用 Travis CI 进行持续集成和部署,并且 更新我们的 Travis 配置 以使用 JDK 8 非常简单。
当然,升级最有趣的方面是代码本身的更改。 查看 拉取请求 #348 中的提交,您将看到更改分为几个类别,包括重构以使用 lambda 表达式并利用 JDK 8 强大的新 Stream API。
对于 一个非常简单的示例,从这样的代码
List<String> projectVersions = new ArrayList<>();
for (ProjectRelease projectRelease : project.getProjectReleases()) {
projectVersions.add(projectRelease.getVersion());
}
变为这样,真是太好了
List<String> projectVersions = project.getProjectReleases().stream()
.map(ProjectRelease::getVersion)
.collect(Collectors.toList());
或者,在 单元测试中,从仪式性的
mockMvc.perform(createPostRequest)
.andExpect(new ResultMatcher() {
@Override
public void match(MvcResult result) {
String redirectedUrl = result.getResponse().getRedirectedUrl();
assertThat(redirectedUrl, startsWith("/admin/blog"));
}
});
变为简洁易懂的
mockMvc.perform(createPostRequest)
.andExpect(result -> {
String redirectedUrl = result.getResponse().getRedirectedUrl();
assertThat(redirectedUrl, startsWith("/admin/blog"));
});
当然,您在上面看到的只是 JDK 8 中流、lambda 表达式和方法引用可能实现的功能的冰山一角。 有一些新概念需要学习,但您会很高兴您这样做了! 为此,我们建议阅读 Venkat Subramanian 的优秀著作 Functional Programming in Java。
我们可以进行其他更改以充分利用 JDK 8 提供的功能,其中包括将我们对 java.util.Date
、java.util.Calendar
和 java.util.TimeZone
的使用转换为 JDK 8 的新 Date and Time API。 我们创建了 issue #360 来实现这一点,如果您有兴趣帮助实现它,我们很乐意与您合作完成拉取请求。 只需查看 贡献者指南,并在该 issue 的评论中告诉我们您有兴趣。
无论如何,如果您一直好奇地想查看和使用 JDK 8 中的新功能和 API,我们希望您会发现对 Sagan 应用程序的这些更改是一个有用的参考。
注意: 如果您已经从本地检出了 Sagan 存储库,则需要重新生成您的 IDE 项目元数据,以确保您能够针对 1.8 级别的语言功能正常工作。 项目 wiki 已更新,以反映正确的需求和执行此操作的步骤。
此外,要更全面地了解 JDK 8 中语言和 API 级别可用的功能,请务必查看 Benjamin Winterberg 的优秀著作 Java 8 Tutorial 和 Java SE 8 API Explorer。
今年的 SpringOne 将于 9 月 8 日至 11 日在德克萨斯州达拉斯举行,超级早鸟注册现已开放。 我们希望在那里见到你!