1. 程式人生 > >Spring 4.x框架中的新特性---4.1中的新功能和提升

Spring 4.x框架中的新特性---4.1中的新功能和提升

JMS的改善

Spring4.1通過引入帶有@JmsListener註解的bean方法給註冊JMS監聽端點提供一個更加簡單的基礎設施。XML名稱空間已經被增強,以便支援這種新的樣式(jms:annotation-driven),並它還可以使用Java配置(@EnableJms、JmsListenerContainerFactory)來配置這個基礎設施,也可以使用JmsListenerConfigurer方法通過程式設計來註冊監聽端點。

Spring4.1繼續支援JMS,同時還可以獲取從4.0開始引入的spring-messaging抽取的好處:

1. 訊息監聽器端點可以有更加靈活的簽名,以及來自諸如@Payload、@Header、@Headers和@SendTo等標準訊息註解的好處。它還可以使用標準的Message來代替javax.jms.Message作為方法的引數;

2.  新的JmsMessageOperations介面是可用的,並且允許像使用Message抽象的操作一樣使用JmsTemplate。

最後,Spring4.1還提供了一些其他方面的改善:

1. 支援JmsTemplate中的同步請求---響應操作;

2. 每個<jms:listener/>元素可以指定監聽優先順序;

3. 訊息監聽容器的回覆選項時可配置的,它是使用BackOff演算法來實現的;

4. JMS2.0支援共享消費。

快取的改善

Spring4.1使用Spring既存的快取配置和基礎抽象來支援JCache(JSR-107)註解,它使用標準的註解,不需要改變。

Spring4.1還顯著的改善了它自己的快取抽象:

1. 使用CacheResolver可以在執行時分解快取。不再強制使用快取名稱來定義結果值的引數。

2. 更多的自定義操作級別:cache resolver、cache manager、key generator。

3. 新的@CacheConfig類級別註解允許在類的層級上共享常用的設定,而不需啟用任何快取操作;

4. 使用CacheErrorHandler方法來進行更好的快取異常處理。

Spring4.1在CacheInterface介面中還有一個突破性的改變,就是添加了一個新的putIfAbsent方法。

Web方面的改善

1. 現存的基於ResourceHttpRequestHandler類的資源處理方式已經被新的抽象類ResourceResolver、Resourcetransformer、ResourceUrlProvider所擴充套件。很多內建的實現提供了版本化的資源URLs(有效的HTTP快取)、定位gzip壓縮資源、生成HTML5應用快取清單等支援,詳細請閱讀

資源服務

2. 目前JDK1.8的java.util.Optional包支援@RequestParam、@RequestHeader和@matrixVariable註解樣式的控制器方法引數。

3. 用ListenableFuture作為返回值來替代DeferredResult,在底層的服務(或者叫AsyncRestTemplate)已經返回ListenableFuture物件。

4. 按照內部相關的依賴順序呼叫@ModelAttribute方法,詳細請看SPR-6299

5. 為了系列化相同POJO物件的不同數量的細節資訊,在@ResponseBody和ResponseEntity控制器方法上直接支援Jackson的@JsonView,這種方法還可以通過把系列化的View型別作為模板屬性新增到一個指定的鍵下來支援基於View的渲染。詳細資訊請看“支援Jackson系列化檢視”。

6. 使用Jackson來支援JSONP。詳細請看“支援JackSonJSONP”。

7. 用一個新的生命週期選項在響應被寫入之前或之後來攔截@ResponseBody和responseEntity方法。這個生命週期選項利用宣告一個@ControllerAdvice bean來實現ResponseBodyAdvice。這樣做的好處是內建了對@JsonView和JSONP的支援。詳細請看“用HandlerInterceptor來攔截請求”。

8. 有三種可選的新的HttpMessageConverter:

    A. Gson---比Jackson更輕量級,已經在Spring的Android版本中使用;

    B. GoogleProtocol Buffers---高效的企業級應用內部服務間通訊的資料協議,但是它也能夠作為JSON和XML暴露給瀏覽器;

通過jackson-dataformat-xml擴充套件支援基於XML系列化的Jackson,在使用@EnableWebMvc或<mvc:annotation-driven/>時,如果jackson-dataformat-xml在類路徑中,那麼在預設的情況下它會被用於替代JAB2。

9. 諸如JSP的View能夠通過引用控制對映的名稱來建立控制器的鏈路。預設名稱是跟每個@RequestMapping匹配。例如支援方法handleFoo的FooController被命名為“FC#handleFoo”。這種命名策略是可插拔的。它也可能通過它的名稱屬性來顯示的命名一個@RequestMapping。在Spring的JSP標籤庫中有一個新的mvcUrl函式,它會讓這種機制方便的應用到JSP頁中。詳細的請看第21.7.2,“從View中建立指向控制和方法的URI”。

10. ResponseEntity提供了一個構造器樣式的API把控制器方法引導到服務端的響應操作,如ResponseEntity.ok()。

11. RequestEntity是一種新的提供了構造器樣式API的型別,它把客戶端的REST程式碼引導到HTTP請求的操作。

12. MVC的Java配置和XML名稱空間:

可以配置的View解析器包括了對內容協商的支援,詳細請看第26.16.8,“View解析器”。

View控制器內建了對重定向和設定相應狀態的支援,應用程式可以使用這個特性來配置重定向的URL,提供用於響應404錯誤的View,傳送沒有內容的響應等。使用案例請看這裡

13. 支援Groovy標記模板(基於Groovy2.3)。詳細請看GroovyMarkupConfigurer類、各自的ViewResolver和View實現。

WebSocket訊息方面的改善

1. 在客戶端支援SockJS方面的支援,請看SockJsClient類以及該類程式包中的其他類;

2. 新的應用上下文事件SessionSubscribeEvent和SessionUnscribeEvent用於釋出STOMP客戶端訂閱和退訂的時機;

3. 新的WebSocket的作用域,詳細請看25.4.14,“WebSocket的作用域”;

4. @SendToUser能夠只把一個單獨的會話作為目標,而且不需要授權使用者;

5. @MessageMapping方法可以使用”.”來代替”/”作為路徑分割符,詳細請看SPR-11660

6. STOMP/WebSocket監控資訊的收集和記錄。詳細請看25.4.16,“執行時監控”;

7. 顯著的優化和改善了日誌功能 ,它依然保留了非常好的可讀性和簡潔的DEBUG級別事件。

8. 優化了訊息建立機制,包括對易變的臨時訊息、撤回自動訊息id以及時間戳的建立的支援。詳細請看MessageHeaderAccessor類的Javadoc.

9. WebSockket會話建立後,如果60秒內沒有活動,則會關閉STOMP/WebSocket連線。

測試方面的改善

1. 在用於整合的TestContext框架中,現在可以用Groovy指令碼來載入ApplicationContext配置,詳細請看“使用Groovy指令碼的上下文配置”。

2. 在事務性的測試方法中通過新的TestTransaction類的API以程式設計啟動和結束的方式來管理事務。詳細請看“程式的事務管理”。

3. 通過新的@Sql和@SqlConfig註解在每個類或方法上宣告可以執行的SQL指令碼配置。詳細請看“執行SQL指令碼”。

4. 通過新的@TestPropertySorce註解可以配置自動重寫系統和應用程式屬性源的測試屬性源。詳細請看“用於測試屬性源的上下文配置”。

6. 自定義的TestExecutionListeners可以自動的跟預設的監聽器合併,詳細請看“合併TestExecutionListeners”。

7. 在TestContext框架中支援的事務測試的文件解釋的更加深入,並添加了一些示例,詳細請看“事務管理”。

8. 對MockServletContext、MockHttpServletRequest和其他的Servlet 模擬API做了大量的改善。

9. AssertThrows已經被重構來支援Throwable,而不是Exception

10. 在Spring MVC的測試框架中,可以把JSON Assert做為一個額外的選項可以斷言JSON的響應,使用JSONPath的這個選項非常像帶有XMLUnit測試能力的XML所做的事情。

11.MockMvcBuilder的清單可以在MockMvcConfigurer的幫助下來建立。增加了這種方式使得它可以更加容易的申請到Sring的安全設定,而且也可以為第三方的框架或工程內部封裝通用的設定。

12.MockRestServiceServer現在支援用於客戶端測試的AsyncRestTemplate。