一、釋出說明
北京時間10月15日,Spring Framework推出 5.3.11
和 5.2.18
兩個新版本。Spring Framework5.3.11
包括。Spring Framework5.2.18
包括。
隨著越來越多的人使用Spring Boot 逐漸忽略了Spring Framework的關注,其實兩者的關係密不可分,對Spring Boot 如果想要能研究得更深入,那麼,就需要對Spring Framework有更足夠的瞭解和應用。
二、介紹Spring Framework
Spring 使建立 Java 企業應用程式變得容易。它提供了在企業環境中使用 Java 語言所需的一切,支援 Groovy 和 Kotlin 作為 JVM 上的替代語言,並且可以根據應用程式的需要靈活地建立多種架構。從 Spring Framework 5.1 開始,Spring 需要 JDK 8+(Java SE 8+)併為 JDK 11 LTS 提供開箱即用的支援。建議將 Java SE 8 update 60 作為 Java 8 的最低修補程式版本,但通常建議使用最新的修補程式版本。
Spring 支援廣泛的應用場景。在大型企業中,應用程式往往存在很長時間,並且必須執行在升級週期不受開發人員控制的JDK和應用程式伺服器上。其他可能作為嵌入伺服器的單個 jar 執行,可能在雲環境中。還有一些可能是不需要伺服器的獨立應用程式(例如批次處理或整合工作負載)。
Spring 是開源的。它擁有一個龐大而活躍的社群,可根據各種實際用例提供持續的反饋。這幫助 Spring 在很長一段時間內成功發展。
三、Spring Framework 與Spring Boot的版本對應關係
Spring boot 版本 | Spring Framework | jdk 版本 | maven 版本 |
---|---|---|---|
1.5.0.RELEASE | 4.3.6.RELEASE | 7 | 3.2+ |
1.5.2.RELEASE | 4.3.7.RELEASE | 7 | 3.2+ |
1.5.3.RELEASE | 4.3.8.RELEASE | 7 | 3.2+ |
1.5.4.RELEASE | 4.3.9.RELEASE | 7 | 3.2+ |
1.5.5.RELEASE | 4.3.10.RELEASE | 7 | 3.2+ |
1.5.7.RELEASE | 4.3.11.RELEASE | 7 | 3.2+ |
1.5.8.RELEASE | 4.3.12.RELEASE | 7 | 3.2+ |
1.5.9.RELEASE | 4.3.13.RELEASE | 7 | 3.2+ |
2.0.0.RELEASE | 5.0.2.RELEASE | 8 | 3.2+ |
2.1.*.RELEASE | 5.1.*.RELEASE | 8 | 3.2+ |
2.2.*.RELEASE | 5.2.*.RELEASE | 8 | 3.3+ |
2.3.*.RELEASE | 5.2.*.RELEASE | 8+ | 3.3+ |
2.4.* | 5.3.* | 8+ | 3.3+ |
2.5.* | 5.3.* | 8+ | 3.3+ |
2.6.* | 5.3.* | 8+ | 3.3+ |
四、主要更新內容
以下列舉了5.3.11版本的更新內容,5.2.18請自行檢視官網
4.1 新特性
- 增強 DefaultResponseErrorHandler 以允許記錄完整的錯誤響應正文
- 在 CookieAssertions 失敗訊息中包含正確的關鍵字
- 在 ByteArrayResource.hashCode() 中使用 Arrays.hashCode()
- 通過系統屬性允許預設的 CacheAwareContextLoaderDelegate 設定 27540
- 直接呼叫 bean 派生的 (Auto)Closeable.close() 方法
- JDK 9+ 的 JNDI API 防禦性參考(可選
java.naming
模組) - 當消費者任務被拒絕時 DefaultMessageListenerContainer 不會記錄錯誤/警告
- 在 externallyManaged RootBeanDefinition 屬性上提供存取器
- 允許在
CglibAopProxy
via 避免類驗證ProxyFactory
- 新增對非公共記錄宣告的支援
- 為格式錯誤的 HTTP 響應發出 WebClientResponseException
- 如果當前連線的自動提交設定為 false,則 DatabasePopulatorUtils.execute 應該提交
4.2 BUG修復
- CronTrigger 使用 new Date() 而不是上下文的時鐘
- 在 AbstractFileResolvingResource.isReadable() 下載巨大的 jars 以檢查元件長度時 con.getContentLengthLong() 的效能影響
- ResourceUrlEncodingFilter 對 HttpServletResponse#encodeURL 的效能影響
- UriTemplateRequestEntity 不會覆蓋 hashCode() 和 equals()
- DataBufferUtils.write 丟失上下文
- 避免在 <cache:annotation-driven /> 中重複註冊 JCacheOperationSource bean
- 使用 Java 17 生成代理失敗,並顯示「無法呼叫「Object.getClass()」,因為「cause」為空」
- MediaType.sortBySpecificityAndQuality 丟擲 java.lang.IllegalArgumentException:比較方法違反其一般約定
- 讀取 SSE 響應時刪除前導空格
- RegEx 中的非跳脫花括號導致 Android 上的初始化錯誤
- ConcurrentReferenceHashMap 的 entrySet 違反了 Map 契約
- 避免在 StandardBeanExpressionResolver 中提前確定 ConversionService
- Spring Framework >= 5.3.8 由於 InputStream 優化,ASM ClassReader 無法解析類檔案
- StringUtils.collectionToDelimitedString(?) 當集合包含 null 時失敗並出現 NullPointerException
- Spring HATEOAS 在 WebFlux 中使用 Kotlin 協程和 ResponseEntity 導致 406
4.3 檔案
- 刪除關於缺少快取 API 的評論。
4.4 依賴升級
- Upgrade to JUnit 5.8.1
- Upgrade to Reactor 2020.0.12
- Upgrade to SmallRye Mutiny 1.1.1
詳細請點選官網地址檢視: