Spring Framework 4.2 中的新功能和加強功能

本文同不至http://www.waylau.com/new-features-and-enhancements-in-spring-framework-4.2/html

至今爲止,Spring Framework 的最新版本爲 4.2.1.RELEASE。 那麼 Spring Framework 4.2 中的又有哪些新功能和加強功能呢?java

<!-- more -->git

核心容器改進

  • 如 @bean 註釋,就如同獲得發現和處理 Java 8 默認方法同樣,能夠容許組合配置類與默認@bean 接口方法。
  • 配置類如今能夠聲明 @import 做爲常規組件類,容許引入的配置類和組件類進行混合。
  • 配置類能夠聲明一個 @Order 值,用來獲得相應的處理順序(例如重寫 bean 的名字),即便經過類路徑掃描檢測。
  • @Resource 注入點支持 @Lazy 聲明,相似於 @autowired, 用於接收用於請求目標 bean 的懶初始化代理。
  • 如今的應用程序事件基礎架構提供了一個基於註解的模型以及發佈任意事件的能力。
    • 任何受管 bean 的公共方法使用 @EventListener 註解來消費事件。
    • @TransactionalEventListener 提供事務綁定事件支持。
  • 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, @TransactionalEventListenergithub

    • 例如,spring-test 的 @ContextConfiguration 如今聲明以下:web

      public @interface ContextConfiguration {算法

      @AliasFor("locations")
        String[] value() default {};
      
        @AliasFor("value")
        String[] locations() default {};
      
        // ...

      }spring

    • 一樣, 組合註解(composed annotations)從元註解覆蓋的屬性,如今可使用 @AliasFor 進行細粒度控制哪些屬性是覆蓋在一個註釋的層次結構。事實上,如今能夠聲明一個別名給元註釋的 value 屬性。數據庫

    • 例如,開發一個組合註解用於一個自定義的屬性的覆蓋數組

      @ContextConfiguration public @interface MyTestConfig {spring-mvc

      @AliasFor(annotation = ContextConfiguration.class, attribute = "value")
        String[] xmlFiles();
      
        // ...

      }

    • Spring Annotation Programming Model

  • 許多改進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,用於靜態資源
  • @ResponseStatus 發現嵌套異常。
  • 在 RestTemplate 中的 UriTemplateHandler 擴展端點
    • DefaultUriTemplateHandler 暴露 baseUrl 屬性和路徑段的編碼選項
    • 擴展端點可使用插入任何 URI 模板庫
  • OkHTTP 與 RestTemplate 集成
  • 自定義 baseUrl 在 MvcUriComponentsBuilder 選擇方法。
  • 序列化/反序列化異常消息如今記錄爲 WARN 級別
  • 默認的 JSON 前綴改變了從{}&&改成更安全的)]}’,
  • 新的 RequestBodyAdvice 擴展點和內置的實現支持 Jackson 的 在 @RequestBody 的 @JsonView
  • 當使用 GSON 或 Jackson 2.6 +,處理程序方法的返回類型是用於提升參數化類型的序列化,好比 List<Foo>
  • 引入的 ScriptTemplateView 做爲 JSR-223 的腳本化 web 視圖機制爲基礎,關注 JavaScript 視圖模板 Nashorn (JDK 8)。

WebSocket 消息改進

  • 暴露展現信息關於用戶的鏈接和訂閱:
    • 新 SimpUserRegistry 公開爲一個名爲「userRegistry」的bean。
    • 共享在服務器集羣的展現信息(見代理中繼配置選項)
  • 解決用戶目的地在集羣的服務器(見代理中繼配置選項)。
  • StompSubProtocolErrorHandler 擴展端點用來自定義和控制 STOMP ERROR 幀給用戶
  • 全局 @MessageExceptionHandler 方法經過 @ControllerAdvice 組件
  • 心跳和 SpEL 表達式'selector'頭用 SimpleBrokerMessageHandler 訂閱
  • STOMP 客戶端使用TCP 和 WebSocket; 見 25.4.13, 「STOMP 客戶端
  • @SendTo 和 @SendToUser 能夠包含目標變量的佔位符。 Jackson 的 @JsonView 支持 @MessageMapping 和 @SubscribeMapping 方法返回值
  • ListenableFuture 和 CompletableFuture 是從 @MessageMapping 和 @SubscribeMapping 方法返回類型值
  • MarshallingMessageConverter 用於 XML 有效載荷

測試改進

  • 基於 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 棄用,在後續版本將被刪除。
  • @Sql 如今支持內聯 SQL 語句的執行經過一個新的 statements 屬性
  • 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「給嵌入式數據庫生成唯一名稱」的細節。

參考

相關文章
相關標籤/搜索