《Spring實戰(第4版)》——1.4 Spring的新功能
本節書摘來自異步社區《Spring實戰(第4版)》一書中的第1章,第1.4節,作者: 【美】Craig Walls(沃爾斯)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.4 Spring的新功能
當本書的第3版交付印刷的時候,當時Spring的最新版本是3.0.5。那大約是在3年前,從那時到現在發生了很多的變化。Spring框架經曆了3個重要的發布版本——3.1、3.2以及現在的4.0——每個版本都帶來了新的特性和增強,以簡化應用程序的研發。Spring Portfolio中的一些成員項目也經曆了重要的變更。
本書也進行了更新,試圖涵蓋這些發布版本中眾多最令人興奮和有用的特性。但現在,我們先簡要地了解一下Spring帶來了哪些新功能。
1.4.1 Spring 3.1新特性
Spring 3.1帶來了多項有用的新特性和增強,其中有很多都是關於如何簡化和改善配置的。除此之外,Spring 3.1還提供了聲明式緩存的支持以及眾多針對Spring MVC的功能增強。下麵的列表展現了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.1所提供的新功能以外,同等重要的是要注意Spring 3.1不再支持的功能。具體來講,為了支持原生的EntityManager,Spring的JpaTemplate和JpaDaoSupport類被廢棄掉了。盡管它們已經被廢棄了,但直到Spring 3.2版本,它依然是可以使用的。但最好不要再使用它們了,因為它們不會進行更新以支持JPA 2.0,並且已經在Spring 4中移除掉了。
現在,讓我們看一下Spring 3.2提供了什麼新功能。
1.4.2 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,而不必再使用web.xml。與之類似,當你希望通過基於Java的方式來配置Spring的時候,可以使用Abstract- Annotat ionConfigDispatcherServletInitializer的子類;
新增了ResponseEntityExceptionHandler,可以用來替代Default- HandlerException Resolver。ResponseEntityExceptionHandler方法會返回ResponseEntity
@Autowired、@Value和@Bean注解能夠作為元注解,用於創建自定義的注入和bean聲明注解;
@DateTimeFormat注解不再強依賴JodaTime。如果提供了JodaTime,就會使用它,否則的話,會使用SimpleDateFormat;
Spring的聲明式緩存提供了對JCache 0.5的支持;
支持定義全局的格式來解析和渲染日期與時間;
在集成測試中,能夠配置和加載WebApplicationContext;
在集成測試中,能夠針對request和session作用域的bean進行測試。
在本書的多個章節中,都能看到Spring 3.2的特性,尤其是在Web和REST相關的章節中。
1.4.3 Spring 4.0新特性
當編寫本書時,Spring 4.0是最新的發布版本。在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。
可以看到,在Spring框架的最新發布版本中,包含了很多令人興奮的新特性。在本書中,我們將會看到很多這樣的新特性,同時也會學習Spring中長期以來一直存在的特性。
最後更新:2017-05-31 10:32:01