核心容器改進
- 核心容器額外提供了更豐富的元數據來改進編程。
- 默認 Java 8 的方法檢測爲 bean 屬性的 getter/setter 方法。
- 若是目標 bean 只定義了一個構造函數,則它無須要指定@Autowired註解
- @Configuration類支持構造函數注入。
- 任何 SpEL 表達式用於指定@EventListener的 condition 引用到 bean(例如@beanName.method())。
- 組成註解如今能夠用一個包含元註解中的數組屬性的數組組件類型的元素來覆蓋。例如,@RequestMapping的的String[] path 能夠在組成註解用 String path 覆蓋。
- @Scheduled和@Schedules如今是做爲元註解用來經過屬性覆蓋來建立自定義的組成註解。
- @Scheduled適當支持任何範圍內的 bean。
數據訪問改進
jdbc:initialize-database 和 jdbc:embedded-database 支持可配置的分離器被應用到每一個腳本。html
緩存改進
Spring 4.3 容許在一個給定的 key 併發調用時實現要同步,使得相應的值只計算一次。這是一個可選的功能,經過設置@Cacheable的新的 sync 屬性來啓用。此功能引入了Cache接口的一個重大更改,即get(Object key, Callable<T> valueLoader)方法已添加。git
Spring 4.3 還改進了緩存抽象以下:github
- SpEL 表達式對於緩存相關的註解,如今能夠引用 bean(即@beanName.method()))。
- ConcurrentMapCacheManager和ConcurrentMapCache如今經過一個新的storeByValue屬性支持緩存實體的序列化。 @Cacheable,@CacheEvict,@CachePut和@Caching如今是做爲元註解用來經過屬性覆蓋來建立自定義的組成註解。
JMS 改進
- @SendTo如今能夠在類級別指定一個共同回覆目標。
- @JmsListener 和 @JmsListeners如今是做爲元註解用來經過屬性覆蓋來建立自定義的組成註解。
Web 改進
- 內建支持 HTTP HEAD 和 HTTP OPTIONS.
- 新的組合註解 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, 和 @PatchMapping 用於 @RequestMapping。
- 新的@RequestScope, @SessionScope, 和 @ApplicationScope用於 web 範圍的組合註解
- 新的 @RestControllerAdvice 註解是 @ControllerAdvice 和 @ResponseBody 的語義結合
- @ResponseStatus如今在類級別被支持,並被全部方法繼承
- 新的 @SessionAttribute 註解用於訪問 session 屬性 (見例子)
- 新的 @RequestAttribute 註解用於訪問請求屬性 (見例子)
- @ModelAttribute 容許經過 binding=false 來避免數據綁定(見引用)
- 錯誤和自定義拋出,將被統一到 MVC 異常處理器中處理
- HTTP 消息轉換編碼一致處理,包括默認 UTF-8 用於多部分文本內容
- 靜態資源處理使用配置的ContentNegotiationManager用於媒體類型計算
- RestTemplate 和 AsyncRestTemplate 支持經過DefaultUriTemplateHandler 來實現嚴格的URI變量編碼
- AsyncRestTemplate支持請求攔截
WebSocket 消息改進
@SendTo和@SendToUser如今能夠在類級被指定爲共享共同的目的地。web
測試改進
- 爲了支持 Spring TestContext Framework ,如今須要 JUnit 4.12 或者更高的版本
- 新的SpringRunner 關聯於 SpringJUnit4ClassRunner
- 測試相關的註解,如今能夠在接口上聲明瞭。例如,基於 Java 8 的接口上使用測試接口
- 空聲明的 @ContextConfiguration 如今將會徹底忽略,若是檢測到默認的 XML 文件, Groovy 腳本, 或 @Configuration 類型
- @Transactional 測試方法再也不須要public (如, 在 TestNG 和 JUnit 5)
- @BeforeTransaction 和 @AfterTransaction再也不須要public,而且在 基於 Java 8 的接口的默認方法上聲明
- 在Spring TestContext Framework 的ApplicationContext的緩存如今有界爲32默認最大規模和最近最少使用驅逐策略。最大的大小能夠經過設置稱爲spring.test.context.cache.maxSize 一個 JVM 系統屬性或 Spring 配置。
- ContextCustomizer API 用於自定義測試 ApplicationContext 在 bean 定義加載到上下文後但在上下文被刷新前。定製工具能夠在全球範圍由第三方進行註冊,而無須要實現一個自定義的 ContextLoader。
- @Sql 和 @SqlGroup 如今做爲元註解經過覆蓋屬性來建立自定義組合註解
- ReflectionTestUtils如今在 set 或 get 一個字段時,會自動解開代理。
- 服務器端的 Spring MVC 測試支持具備多個值的響應頭。
- 服務器端的 Spring MVC 測試解析表單數據的請求內容和填充請求參數。
- 服務器端的 Spring MVC 測試支持 mock 式的斷言來調用處理程序方法。
- 客戶端 REST 測試支持容許指定多少次預期的請求以及指望的聲明順序是否應該被忽略(參見15.6.3,「客戶端REST測試」)。
- 客戶端 REST 測試支持請求主體表單數據的預期。
支持新的類庫和服務器
- Hibernate ORM 5.2 (一樣很好的支持 4.2/4.3 和 5.0/5.1,不推薦 3.6 )
- Jackson 2.8 (在Spring 4.3,最低至 Jackson 2.6+ )
- OkHttp 3.x (仍然並行支持 OkHttp 2.x)
- Netty 4.1
- Undertow 1.4
- Tomcat 8.5.2 以及 9.0 M6
參考引用
- 中文的https://github.com/waylau/spring-framework-4-reference