本文來自:開源中國
摘要
本文介紹了 Spring 4.3 的新功能和增強的特性。
核心容器改進
- 核心容器額外提供了更豐富的元數(shù)據(jù)來改進編程。
- 默認 Java 8 的方法檢測為 bean 屬性的 getter/setter 方法。
- 如果目標 bean 只定義了一個構(gòu)造函數(shù),則它無需要指定@Autowired注解
- @Configuration類支持構(gòu)造函數(shù)注入。
- 任何 SpEL 表達式用于指定@EventListener的 condition 引用到 bean(例如@beanName.method())。
- 組成注解現(xiàn)在可以用一個包含元注解中的數(shù)組屬性的數(shù)組組件類型的元素來覆蓋。例如,@RequestMapping的的String[] path 可以在組成注解用 String path 覆蓋。
- @Scheduled和@Schedules現(xiàn)在是作為元注解用來通過屬性覆蓋來創(chuàng)建自定義的組成注解。
- @Scheduled適當支持任何范圍內(nèi)的 bean。
數(shù)據(jù)訪問改進
- jdbc:initialize-database 和 jdbc:embedded-database 支持可配置的分離器被應用到每個腳本。
緩存改進
Spring 4.3 允許在一個給定的 key 并發(fā)調(diào)用時實現(xiàn)要同步,使得相應的值只計算一次。這是一個可選的功能,通過設置@Cacheable的新的 sync 屬性來啟用。此功能引入了Cache接口的一個重大更改,即get(Object key, Callable<T> valueLoader)方法已添加。
Spring 4.3 還改進了緩存抽象如下:
- SpEL 表達式對于緩存相關的注解,現(xiàn)在可以引用 bean(即@beanName.method()))。
- ConcurrentMapCacheManager和ConcurrentMapCache現(xiàn)在通過一個新的storeByValue屬性支持緩存實體的序列化。 @Cacheable,@CacheEvict,@CachePut和@Caching現(xiàn)在是作為元注解用來通過屬性覆蓋來創(chuàng)建自定義的組成注解。
JMS 改進
- @SendTo現(xiàn)在可以在類級別指定一個共同回復目標。
- @JmsListener 和 @JmsListeners現(xiàn)在是作為元注解用來通過屬性覆蓋來創(chuàng)建自定義的組成注解。
Web 改進
- 內(nèi)建支持HTTP HEAD 和 HTTP OPTIONS。
- 新的組合注解 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, 和 @PatchMapping 用于 @RequestMapping。
- 詳見 @RequestMapping 組合變種
- 新的@RequestScope, @SessionScope, 和 @ApplicationScope用于 web 范圍的組合注解
- Request scope, Session scope, 和 Application scope
- 新的 @RestControllerAdvice 注解是 @ControllerAdvice 和 @ResponseBody 的語義結(jié)合
- @ResponseStatus現(xiàn)在在類級別被支持,并被所有方法繼承
- 新的 @SessionAttribute 注解用于訪問 session 屬性 (見例子)
- 新的 @RequestAttribute 注解用于訪問請求屬性 (見例子)
- @ModelAttribute 允許通過 binding=false 來避免數(shù)據(jù)綁定(見引用)
- 錯誤和自定義拋出,將被統(tǒng)一到 MVC 異常處理器中處理
- HTTP 消息轉(zhuǎn)換編碼一致處理,包括默認 UTF-8 用于多部分文本內(nèi)容
- 靜態(tài)資源處理使用配置的ContentNegotiationManager用于媒體類型計算
- RestTemplate 和 AsyncRestTemplate 支持通過DefaultUriTemplateHandler 來實現(xiàn)嚴格的URI變量編碼
- AsyncRestTemplate支持請求攔截
WebSocket 消息改進
@SendTo和@SendToUser現(xiàn)在可以在類級被指定為共享共同的目的地。
測試改進
- 為了支持 Spring TestContext Framework ,現(xiàn)在需要 JUnit 4.12 或者更高的版本
- 新的SpringRunner 關聯(lián)于 SpringJUnit4ClassRunner
- 測試相關的注解,現(xiàn)在可以在接口上聲明了。例如,基于 Java 8 的接口上使用測試接口
- 空聲明的 @ContextConfiguration 現(xiàn)在將會完全忽略,如果檢測到默認的 XML 文件, Groovy 腳本, 或 @Configuration 類型
- @Transactional 測試方法不再需要public (如, 在 TestNG 和 JUnit 5)
- @BeforeTransaction 和 @AfterTransaction不再需要public,并且在 基于 Java 8 的接口的默認方法上聲明
- 在Spring TestContext Framework 的ApplicationContext的緩存現(xiàn)在有界為32默認最大規(guī)模和最近最少使用驅(qū)逐策略。最大的大小可以通過設置稱為spring.test.context.cache.maxSize 一個 JVM 系統(tǒng)屬性或 Spring 配置。
- ContextCustomizer API 用于自定義測試 ApplicationContext 在 bean 定義加載到上下文后但在上下文被刷新前。定制工具可以在全球范圍由第三方進行注冊,而無需要實現(xiàn)一個自定義的 ContextLoader。
- @Sql 和 @SqlGroup 現(xiàn)在作為元注解通過覆蓋屬性來創(chuàng)建自定義組合注解
- ReflectionTestUtils現(xiàn)在在 set 或 get 一個字段時,會自動解開代理。
- 服務器端的 Spring MVC 測試支持具有多個值的響應頭。
- 服務器端的 Spring MVC 測試解析表單數(shù)據(jù)的請求內(nèi)容和填充請求參數(shù)。
- 服務器端的 Spring MVC 測試支持 mock 式的斷言來調(diào)用處理程序方法。
- 客戶端 REST 測試支持允許指定多少次預期的請求以及期望的聲明順序是否應該被忽略(參見15.6.3,“客戶端REST測試”)。
- 客戶端 REST 測試支持請求主體表單數(shù)據(jù)的預期。
支持新的類庫和服務器
- 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
參考引用
|