Sagan 项目:升级到 JDK 8

工程 | Chris Beams | 2014 年 4 月 18 日 | ...

我相信大多数读者都知道,Java SE 8 于上个月发布。结合最近发布的 STS 3.5.0及其对 JDK 8 的完全支持,我们认为现在是升级 Sagan 以利用新语言特性和 API 的理想时机。

注意:不熟悉Sagan 项目?它是 Spring 参考应用程序,为本博客和 spring.io 上的所有其他内容提供支持。查看本系列中的第一篇三篇文章以了解更多详细信息。

Cloud Foundry 的Java 构建包自发布之日起就提供了对 JDK 8 的支持。为了开始使用它,我们创建了自己的构建包分支将 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"));
    });

当然,上面看到的只是 Stream、lambda 表达式和 JDK 8 中的方法引用所能实现的功能的冰山一角。有一些新的概念需要学习,但您会很高兴您这么做了!为此,我们建议阅读 Venkat Subramanian 撰写的优秀书籍《Java 函数式编程》

我们可以进行其他更改以充分利用 JDK 8 提供的功能,其中包括将我们对 java.util.Datejava.util.Calendarjava.util.TimeZone 的使用转换为 JDK 8 的新日期和时间 API。我们创建了问题 #360来做到这一点,如果您有兴趣帮忙实现,我们很乐意与您一起进行拉取请求。只需查看贡献者指南,并在该问题上发表评论告知我们您有兴趣。

无论如何,如果您一直好奇地想查看和试用 JDK 8 中的新特性和 API,我们希望您会发现对 Sagan 应用程序的这些更改是一个有用的参考。

注意:如果您已经在本地检出 Sagan 存储库,则需要重新生成 IDE 项目元数据以确保您正在正确地使用 1.8 级别的语言特性。 项目 Wiki 已更新以反映正确的需求和执行此操作的步骤。

此外,要更全面地了解 JDK 8 中语言和 API 层面上的可用功能,请务必查看 Benjamin Winterberg 撰写的优秀文章《Java 8 教程》《Java SE 8 API 浏览器》


SpringOne 2GX 2014 即将到来

今年的SpringOne 将在德克萨斯州达拉斯举行,时间为 9 月 8 日至 11 日,超早鸟注册现已开放。我们希望在那里见到您!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部