Spring Framework 4.2 中的新功能和增強功能
本文同不至http://www.waylau.com/new-features-and-enhancements-in-spring-framework-4.2/
至今為止,Spring Framework 的最新版本為 4.2.1.RELEASE。那么 Spring Framework 4.2 中的又有哪些新功能和增強功能呢?
<!-- more -->
核心容器改進
- 如 @bean 注釋,就如同得到發現和處理 Java 8 默認方法一樣,可以允許組合配置類與默認@bean 接口方法。
- 配置類現在可以聲明 @import 作為常規組件類,允許引入的配置類和組件類進行混合。
- 配置類可以聲明一個 @Order 值,用來得到相應的處理順序(例如重寫 bean 的名字),即使通過類路徑掃描檢測。 <li>@Resource 注入點支持 @Lazy 聲明,類似于 @autowired, 用于接收用于請求目標 bean 的懶初始化代理。 </li>
- 現在的應用程序事件基礎架構提供了一個基于注解的模型以及發布任意事件的能力。
- 任何受管 bean 的公共方法使用 @EventListener 注解來消費事件。 <li>@TransactionalEventListener 提供事務綁定事件支持。 </li> </ul> </li>
- Spring Framework 4.2引入了一流的支持聲明和查找注釋屬性的別名。新 @AliasFor 注解可用于聲明一雙別名屬性在一個注釋中或從一個屬性在一個聲明一個別名定義注解在元注釋一個屬性組成。
- 下面的注解已加了 @AliasFor 為了支持提供更有意義的 value 屬性的別名: @Cacheable, @CacheEvict, @CachePut, @ComponentScan, @ComponentScan.Filter, @ImportResource, @Scope, @ManagedResource, @Header, @Payload, @SendToUser, @ActiveProfiles, @ContextConfiguration, @Sql, @TestExecutionListeners, @TestPropertySource, @Transactional, @ControllerAdvice, @CookieValue, @CrossOrigin, @MatrixVariable, @RequestHeader, @RequestMapping, @RequestParam, @RequestPart, @ResponseStatus, @SessionAttributes, @ActionMapping, @RenderMapping, @EventListener, @TransactionalEventListener
- 例如,spring-test 的 @ContextConfiguration 現在聲明如下: </ul> </li> </ul>
public @interface ContextConfiguration {
@AliasFor("locations") String[] value() default {}; @AliasFor("value") String[] locations() default {}; // ... }
- 同樣, 組合注解(composed annotations)從元注解覆蓋的屬性,現在可以使用 @AliasFor 進行細粒度控制哪些屬性是覆蓋在一個注釋的層次結構。事實上,現在可以聲明一個別名給元注釋的 value 屬性。
- 例如,開發一個組合注解用于一個自定義的屬性的覆蓋
@ContextConfiguration public @interface MyTestConfig { @AliasFor(annotation = ContextConfiguration.class, attribute = "value") String[] xmlFiles(); // ... }
- 見 Spring Annotation Programming Model</pre>
- 許多改進Spring的搜索算法用于尋找元注解。例如,局部聲明組合注解現在喜歡繼承注解。
- 從元注解覆蓋屬性的組合注解,可以被發現在接口和 abstract, bridge, & interface 方法就像在類,標準方法,構造函數,和字段。
- Map 表示的注解屬性(和 AnnotationAttributes 實例)可以 synthesized (合成,即轉換)成一個注解。
- 基于字段的數據綁定的特點(DirectFieldAccessor)與當前的基于屬性的數據綁定關聯(BeanWrapper)。特別是,基于字段的綁定現在支持集合,數組和 Map 的導航。
- DefaultConversionService 現在提供開箱即用的轉化器給 Stream, Charset, Currency, 和 TimeZone. 這些轉換器可以獨立的添加到任何 ConversionService
- DefaultFormattingConversionService 提供開箱即用的支持 JSR-354 的 Money & Currency 類型 (前提是 'javax.money' API 出現在 classpath): 這些被命名為 MonetaryAmount 和 CurrencyUnit。支持使用 @NumberFormat
- @NumberFormat 現在作為元注解使用
- JavaMailSenderImpl 中新的 testConnection() 方法用于檢查與服務器的連接
- ScheduledTaskRegistrar 用于暴露調度的任務
- Apache commons-pool2 現在支持用于 AOP CommonsPool2TargetSource 的池化
- 引入 StandardScriptFactory 作為腳本化 bean 的 JSR-223 的基本機制,通過 XML 中的lang:std元素暴露。支持如 JavaScript 和 JRuby。(注意:JRubyScriptFactory 和lang:jruby現在不推薦使用了 , 推薦用 JSR-223)
數據訪問改進
- javax.transaction.Transactional 現在可以通過 AspectJ 支持
- SimpleJdbcCallOperations 現在支持命名綁定
- 完全支持 Hibernate ORM 5.0: 作為 JPA 供應商 (自動適配)和原生的 API 一樣 (在新的 org.springframework.orm.hibernate5 包中涵蓋了該內容)
- 嵌入式數據庫可以自動關聯唯一名字,并且<jdbc:embedded-database>支持新的 database-name 屬性。見下面“測試改進”內容
JMS 改進
- autoStartup 屬性可以通過 JmsListenerContainerFactory 進行控制
- 應答類型 Destination 可以配置在每個監聽器容器
- @SendTo 的值可以用 SpEL 表達式
- 響應目的地可以通過 JmsResponse 在運行時計算
- @JmsListener 是可以可以重復的注解用于聲明多個 JMS 容器在相同的方法上 (若你還沒有用上 Java8 請使用新引入的 @JmsListeners)。
Web 改進
- 支持 HTTP Streaming 和 Server-Sent Events , se見 “HTTP Streaming”
- 內建支持 CORS ,包括全局 (MVC Java 配置和 XML 命名空間) 和本地 (如 @CrossOrigin) 配置。見 26 章, CORS 支持
- HTTP 緩存升級
- 新的 CacheControl 構建器; 插入 ResponseEntity, WebContentGenerator, ResourceHttpRequestHandler
- 改進的 ETag/Last-Modified 在 WebRequest 中支持
- 自定義映射注解使用 @RequestMapping 作為 元數據注解
- AbstractHandlerMethodMapping 中的 public 方法用于運行時注冊和注銷請求映射
- AbstractDispatcherServletInitializer 中的 Protected createDispatcherServlet 方法用來進一步自定義 DispatcherServlet 實例
- HandlerMethod 作為 @ExceptionHandler方法的方法參數,特別是方便 @ControllerAdvice 組件
- java.util.concurrent.CompletableFuture 作為 @Controller 方法返回值類型
- 字節范圍(Byte-range)的請求支持在 HttpHeaders,用于靜態資源 <li>@ResponseStatus 發現嵌套異常。 </li>
- 在 RestTemplate 中的 UriTemplateHandler 擴展端點
- DefaultUriTemplateHandler 暴露 baseUrl 屬性和路徑段的編碼選項
- 擴展端點可以使用插入任何 URI 模板庫 </ul> </li>
- OkHTTP 與 RestTemplate 集成
- 自定義 baseUrl 在 MvcUriComponentsBuilder 選擇方法。
- 序列化/反序列化異常消息現在記錄為 WARN 級別
- 默認的 JSON 前綴改變了從{}&&改為更安全的)]}’,
- 新的 RequestBodyAdvice 擴展點和內置的實現支持 Jackson 的 在 @RequestBody 的 @JsonView
- 當使用 GSON 或 Jackson 2.6 +,處理程序方法的返回類型是用于提高參數化類型的序列化,比如List<Foo>
- 引入的 ScriptTemplateView 作為 JSR-223 的腳本化 web 視圖機制為基礎,關注 JavaScript 視圖模板 Nashorn (JDK 8)。 </ul>
- 暴露展示信息關于用戶的連接和訂閱:
- 新 SimpUserRegistry 公開為一個名為“userRegistry”的bean。
- 共享在服務器集群的展示信息(見代理中繼配置選項)
- 解決用戶目的地在集群的服務器(見代理中繼配置選項)。
- StompSubProtocolErrorHandler 擴展端點用來自定義和控制 STOMP ERROR 幀給用戶
- 全局 @MessageExceptionHandler 方法通過 @ControllerAdvice 組件
- 心跳和 SpEL 表達式'selector'頭用 SimpleBrokerMessageHandler 訂閱
- STOMP 客戶端使用TCP 和 WebSocket; 見 25.4.13, “STOMP 客戶端” <li>@SendTo 和 @SendToUser 可以包含目標變量的占位符。 Jackson 的 @JsonView 支持 @MessageMapping 和 @SubscribeMapping 方法返回值 </li>
- ListenableFuture 和 CompletableFuture 是從 @MessageMapping 和 @SubscribeMapping 方法返回類型值
- MarshallingMessageConverter 用于 XML 有效載荷 </ul>
- 基于 JUnit 集成測試現在可以執行 JUnit 規則而不是SpringJUnit4ClassRunner。這允許基于 spring 的集成測試與運行JUnit 的 Parameterized 或第三方 運行器 MockitoJUnitRunner 等。詳見 Spring JUnit 規則
- Spring MVC Test 框架,現在支持第一類 HtmlUnit,包括集成 Selenium’s WebDriver,允許基于頁面的 Web 應用測試而無需部署到 Servlet 容器。詳見 14.6.2, “HtmlUnit 集成”
- AopTestUtils 是一個新的測試工具,允許開發者獲得潛在的目標對象的引用隱藏在一個或多個 Spring 代理。詳見 13.2.1, “常見測試工具”
- ReflectionTestUtils 現在支持 setting 和 getting static 字段,包括常量
- bean 定義歸檔文件的原始順序,通過 @ActiveProfiles 聲明,現在保留為了支持用例,如 Spring 的 ConfigFileApplicationListener 引導加載配置文件基于活動歸檔文件的名稱。
- @DirtiesContext 支持新 BEFORE_METHOD BEFORE_CLASS,BEFORE_EACH_TEST_METHOD 模式,用于測試之前關閉ApplicationContext——例如,如果一些煩人的(即,有待確定)測試在一個大型測試套件的 ApplicationContext 的原始配置已經損壞。
- @Commit 是新的注解直接可以用來代替 @Rollback(false)
- @Rollback 用來配置類級別的默認回滾語義
- 因此,現在 @TransactionConfiguration 棄用,在后續版本將被刪除。
- ContextCache 用于緩存測試之間的 ApplicationContext,而現在這是一個公開的 API ,默認的實現可以替代自定義的緩存需求
- DefaultTestContext, DefaultBootstrapContext, 和 DefaultCacheAwareContextLoaderDelegate 現在是公開的類,支持子包,允許自定義擴展
- TestContextBootstrapper 現在負責構建 TestContext
- 在 Spring MVC Test 框架,MvcResult 詳情可以被日志記錄在 DEBUG 級別或者寫入自定義的 OutputStream 或 Writer。詳見 log(), print(OutputStream), 和 MockMvcResultHandlers 的 print(Writer) 方法
- JDBC XML名稱空間支持一個新的<jdbc:embedded-database>的 database-name 屬性,允許開發人員為嵌入式數據庫設置獨特的名字——例如,通過一個 SpEL 表達式或 前活動bean定義配置文件所影響的占位符屬性
- 嵌入式數據庫現在可以自動分配一個唯一的名稱,允許常用的測試數據庫配置在不同的 ApplicationContext 的測試套件中。參見18.8.6“給嵌入式數據庫生成惟一名稱”的細節。 </ul>
- 《Spring Framework 4.x參考文檔》中文翻譯
- http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/
WebSocket 消息改進
測試改進
參考
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!