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 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.Datejava.util.Calendarjava.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 TutorialJava SE 8 API Explorer


SpringOne 2GX 2014 即將到來

今年的 SpringOne 將於 9 月 8 日至 11 日在德克薩斯州達拉斯舉行超級早鳥註冊現已開放。 我們希望在那裡見到你!

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

搶佔先機

VMware 提供培訓和認證,以加速您的進步。

瞭解更多

獲得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉行的活動

檢視 Spring 社群中所有即將舉行的活動。

檢視全部