領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多相信大多數讀者都知道,Java SE 8 已於上個月發佈。配合近期 STS 3.5.0 的發佈及其對 JDK 8 的完整支援,我們認為現在是升級 Sagan 以利用新的語言功能和 API 的理想時機。
注意:還不熟悉 Sagan 專案嗎?它是 Spring 的參考應用程式,為本部落格以及 spring.io 上的所有內容提供支援。請查看本系列的前三篇文章以了解更多詳細資訊。
Cloud Foundry 的 Java buildpack 自發佈之日起就已提供對 JDK 8 的支援。為了開始使用它,我們建立了 buildpack 的fork,將 JDK 版本從 1.7.0 提升到 1.8.0,並配置了 Gradle build 以在將 Sagan 部署到生產環境時使用我們的 fork。
注意:在不久的將來,1.8.0 將成為 Cloud Foundry build pack 的預設版本,屆時將不再需要上述的 fork 操作。
您可能已經注意到,Sagan 使用 Travis CI 進行持續整合和部署,而將我們的 Travis 配置更新為使用 JDK 8 非常簡單。
當然,升級最有趣的方面是程式碼本身的變更。查看 pull request #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 中 streams、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 來執行此操作,如果您有興趣協助實現,我們很樂意與您合作完成 pull request。請查看貢獻者指南,並在該 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 日在德州達拉斯舉行,超級早鳥註冊現已開放。我們希望在那裡見到您!