Spring| Spring 新特性4

Spring 3.1 新特性

Spring 3.1帶來了多項有用的新特性和增強, 其中有很多都是關於如何簡化和改善配置的。 除此之外, Spring 3.1還提供了聲明式緩存的支持以及衆多針對Spring MVC的功能增強。
除了Spring 3.1所提供的新功能以外, 同等重要的是要注意Spring 3.1不再支持的功能。 具體來講, 爲了支持原生的EntityManager, Spring的JpaTemplate和JpaDaoSupport類被廢棄掉了。 儘管它們已經被廢棄了, 但直到Spring 3.2版本, 它依然是可以使用的。 但最好不要再使用它們了, 因爲它們不會進行更新以支持JPA 2.0, 並且已經在Spring 4中移除掉了。

下面的列表展現了Spring 3.1重要的功能升級:

  • 爲了解決各種環境下(如開發、 測試和生產) 選擇不同配置的問題, Spring 3.1引入了環境profile功能。 藉助於profile, 就能根據應用部署在什麼環境之中選擇不同的數據源bean;
  • 在Spring 3.0基於Java的配置之上, Spring 3.1添加了多個enable註解, 這樣就能使用這個註解啓用Spring的特定功能;
  • 添加了Spring對聲明式緩存的支持, 能夠使用簡單的註解聲明緩存邊界和規則, 這與你以前聲明事務邊界很類似;
  • 新添加的用於構造器注入的c命名空間, 它類似於Spring 2.0所提供的面向屬性的p命名空間, p命名空間用於屬性注入, 它們都是非常簡潔易用的;
  • Spring開始支持Servlet 3.0, 包括在基於Java的配置中聲明Servlet和Filter, 而不再藉助於web.xml;
  • 改善Spring對JPA的支持, 使得它能夠在Spring中完整地配置JPA, 不必再使用persistence.xml文件。

Spring 3.1還包含了多項針對Spring MVC的功能增強:

  • 自動綁定路徑變量到模型屬性中;
  • 提供了@RequestMappingproduces和consumes屬性, 用於匹配請求中的Accept和Content-Type頭部信息;
  • 提供了@RequestPart註解, 用於將multipart請求中的某些部分綁定到處理器的方法參數中;
  • 支持Flash屬性(在redirect請求之後依然能夠存活的屬性) 以及用於在請求間存放flash屬性的RedirectAttributes類型。

Spring 3.2 新特性

Spring 3.1在很大程度上聚焦於配置改善以及其他的一些增強, 包括Spring MVC的增強, 而Spring 3.2是主要關注Spring MVC的一個發佈版本。

Spring MVC 3.2帶來了如下的功能提升:

  • Spring 3.2的控制器(Controller) 可以使用Servlet 3.0的異步請求, 允許在一個獨立的線程中處理請求, 從而將Servlet線程解放出來處理更多的請求;
  • 儘管從Spring 2.5開始, Spring MVC控制器就能以POJO的形式進行很便利地測試, 但是Spring 3.2引入了Spring MVC測試框架, 用於爲控制器編寫更爲豐富的測試, 斷言它們作爲控制器的行爲行爲是否正確, 而且在使用的過程中並不需要Servlet容器;
  • 除了提升控制器的測試功能, Spring 3.2還包含了基於RestTemplate的客戶端的測試支持, 在測試的過程中, 不需要往真正的REST端點上發送請求;
  • @ControllerAdvice註解能夠將通用的@ExceptionHandler、 @ InitBinder和@ModelAttributes方法收集到一個類中, 並應用到所有控制器上;
  • 在Spring 3.2之前, 只能通過ContentNegotiatingViewResolver使用完整的內容協商(full content negotiation) 功能。 但是在Spring 3.2中, 完整的內容協商功能可以在整個Spring MVC中使用, 即便是依賴於消息轉換器(message converter) 使用和產生內容的控制器方法也能使用該功能;
  • Spring MVC 3.2包含了一個新的@MatrixVariable註解, 這個註解能夠將請求中的矩陣變量(matrix variable) 綁定到處理器的方法參數中;
  • 基礎的抽象類AbstractDispatcherServletInitializer能夠非常便利地配置DispatcherServlet, 而不必再使用56web.xml。 與之類似, 當你希望通過基於Java的方式來配置Spring的時候, 可以使用Abstract- AnnotationConfigDispatcherServletInitializer的子類;
  • 新增了ResponseEntityExceptionHandler, 可以用來替代Default- HandlerExceptionResolver。 ResponseEntityExceptionHandler方法會返回ResponseEntity, 而不是ModelAndView;
  • RestTemplate和@RequestBody的參數可以支持範型;
  • RestTemplate和@RequestMapping可以支持HTTP PATCH方法;
  • 在攔截器匹配時, 支持使用URL模式將其排除在攔截器的處理功能之外。

非Spring MVC新特性:

  • @Autowired、 @Value和@Bean註解能夠作爲元註解, 用於創建自定義的注入和bean聲明註解;
  • @DateTimeFormat註解不再強依賴JodaTime。 如果提供了JodaTime, 就會使用它, 否則的話, 會使用SimpleDateFormat;
  • Spring的聲明式緩存提供了對JCache 0.5的支持;
  • 支持定義全局的格式來解析和渲染日期與時間;
  • 在集成測試中, 能夠配置和加載WebApplicationContext;
  • 在集成測試中, 能夠針對request和session作用域的bean進行測試。

Spring 4.0新特性

  • Spring提供了對WebSocket編程的支持, 包括支持JSR-356——Java API for WebSocket;
  • 鑑於WebSocket僅僅提供了一種低層次的API, 急需高層次的抽象, 因此Spring 4.0在WebSocket之上提供了一個高層次的面向消息的編程模型, 該模型基於SockJS, 並且包含了對STOMP協議的支持;
  • 新的消息(messaging) 模塊, 很多的類型來源於Spring Integration項目。 這個消息模塊支持Spring的SockJS/STOMP功能, 同時提供了基於模板的方式發佈消息;
  • Spring是第一批(如果不說是第一個的話) 支持Java 8特性的Java框架, 比如它所支持的lambda表達式。 別的暫且不說, 這首先能夠讓使用特定的回調接口(如RowMapper和JdbcTemplate)更加簡潔, 代碼更加易讀;
  • 與Java 8同時得到支持的是JSR-310——Date與Time API, 在處理日期和時間時, 它爲開發者提供了比java.util.Date或java.util.Calendar更豐富的API;
  • 爲Groovy開發的應用程序提供了更加順暢的編程體驗, 尤其是支持非常便利地完全採用Groovy開發Spring應用程序。 隨這些一起提供的是來自於Grails的BeanBuilder, 藉助它能夠通過Groovy配置Spring應用;
  • 添加了條件化創建bean的功能, 在這裏只有開發人員定義的條件滿足時, 纔會創建所聲明的bean;
  • Spring 4.0包含了Spring RestTemplate的一個新的異步實現,它會立即返回並且允許在操作完成後執行回調;
  • 添加了對多項JEE規範的支持, 包括JMS 2.0、 JTA 1.2、 JPA 2.1和Bean Validation 1.1。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章