三、Spring Framework 4.0的新特性和增強


Spring框架於2004年首次發布,此后出現了重大的重大修改:Spring 2.0提供了XML名稱空間和AspectJ支持;Spring 2.5采用了注解驅動的配置,Spring 3.0在框架代碼庫中引入了強大的Java 5+基礎,以及諸如基於Java的@configuration模型之類的特性。
版本4.0是Spring框架的最新主要版本,也是第一個完全支持Java 8特性的版本,您仍然可以使用Spring的舊版本的Java,然而,現在已經將最低要求提高到Java SE 6,我們還利用了一個主要版本的機會來刪除許多已棄用的類和方法。
升級到Spring 4.0的遷移指南可以在Spring框架的GitHub Wiki上獲得。
3.1改進了入門經驗
新的Spring。io網站提供了一系列的“入門”指南,幫助你學習Spring。你可以在第一章中讀到更多關於指南的內容,在本文檔中開始使用Spring部分。這個新網站還提供了一個全面的概述,介紹了許多在Spring結構下發布的項目。
如果您是一個Maven用戶,您可能也會對現在發布的每個Spring框架發行版的POM文件感興趣。
3.2刪除已棄用的包和方法
所有已棄用的包,以及許多棄用的類和方法在4.0版本中被刪除。如果您正在從以前的Spring版本升級,那么您應該確保您已經修復了對過時的api的不支持的調用。
對於所有的變動,請查看API差異報告。
注意,可選的第三方依賴關系已經提高到2011/2011年的最低限度(也就是說,Spring 4通常只支持在2010年末或之后發布的版本);值得注意的是,Hibernate 3.6+、EhCache 2.1+、Quartz 1.8+、Groovy 1.8+和joda-time 2.0+。Spring 4需要最新的Hibernate Validator 4.3+,並且對Jackson的支持已經集中於2.0+(對Jackson1.8/1.9的支持,當時是Spring 3.2所擁有的,現在已經被棄用了)。
3.3 Java 8(以及6和7)
Spring Framework 4.0提供了對幾個Java 8特性的支持。您可以使用Spring的回調接口來使用lambda表達式和方法引用。對於java.time (JSR-310)有最好的支持,一些現有的注釋已經被改造為@Repeatable您還可以使用Java 8的參數名稱發現(基於-parameters編譯器標志)作為啟用調試信息的另一種選擇。
Spring仍然與舊版本的Java和JDK兼容:具體地說,Java SE 6(特別地,在2010年1月發布的最低的JDK 6更新到18)上面仍然是完全支持的,但是,對基於Spring 4開發的項目,我們建議使用Java 7或8版本。
3.4 Java EE 6 和 7
Java EE版本6或更高版本現在被認為是使用Spring框架4的最基本的標准,JPA 2.0和Servlet 3.0規范具有特殊的相關性。為了與Google App Engine和舊的應用程序服務器保持兼容,可以將Spring 4應用程序部署到Servlet 2.5環境中。然而,強烈建議使用Servlet 3.0+,並且在Spring的測試中,對於開發環境中的測試設置來說,這是一個首要的條件。
 
如果您是WebSphere 7用戶,請確保安裝JPA 2.0功能包。在WebLogic 10.3.4或更高版本中,安裝與它一起的JPA 2.0補丁。這使得這兩種服務器都可以轉換為Spring 4兼容的部署環境。
往長遠看,Spring Framework 4.0支持Java EE 7級別的適用規范:特別是JMS 2.0、JTA 1.2、JPA 2.1、Bean驗證1.1和jsr-236並發實用工具。與往常一樣,這種支持側重於對這些規范的單獨使用,例如在Tomcat或獨立環境中。但是,當將Spring應用程序部署到Java EE 7服務器時,它的工作方式也同樣出色。
請注意,Hibernate 4.3是JPA 2.1的提供者,因此它只支持Spring Framework 4.0。 Hibernate Validator 5.0作為Bean Validation 1.1的提供者也是如此。這兩個版本都沒有得到Spring框架3.2的官方支持。
3.5 Groovy Bean定義DSL
從Spring Framework 4.0開始,可以使用Groovy DSL來定義外部bean配置。在思想上是與 XML bean定義相似的但是允許使用更簡潔的語法。使用Groovy允許你在bootstrap 代碼中直接嵌入bean定義,例如:
def reader = new GroovyBeanDefinitionReader(myApplicationContext)
reader.beans {
    dataSource(BasicDataSource) {
        driverClassName = "org.hsqldb.jdbcDriver"
        url = "jdbc:hsqldb:mem:grailsDB"
        username = "sa"
        password = ""
        settings = [mynew:"setting"]
    }
    sessionFactory(SessionFactory) {
        dataSource = dataSource
    }
    myService(MyService) {
        nestedBean = { AnotherBean bean ->
            dataSource = dataSource
        }
    }
}
要了解更多信息,請參閱 GroovyBeanDefinitionReader javadocs.
3.6核心容器的改進
核心容器有幾個總體改進:
1、Spring現在在注入bean時將泛型類型作為限定符的形式。例如,如果您使用的是Spring Data Repository,那么您現在可以輕松地注入特定的實現:@Autowired Repository<Customer> customerRepository.
2、如果您使用Spring的元注釋,您現在可以開發自定義的注釋,該注釋可以從源注釋中公開特定的屬性。
3、當這些bean被自動裝配到列表和數組時,它們就可以被排序了。都支持@Order注解和Ordered接口。
4、@Lazy 注釋現在可以在注入點上使用,也可以在@bean定義上使用。
5、對於使用基於java的配置的開發人員,已經介紹了@description注釋。
6、通過@Conditional注釋添加了有條件過濾bean的通用模型。這類似於@Profile支持但是允許用戶自定義編程方式。
7、CGLIB-based代理類不再需要一個默認的構造函數。支持通過objenesis庫提供,該庫被重新打包,並作為Spring框架的一部分分發。有了這個策略,不再有任何構造函數被用於代理實例的調用。
8、現在在整個框架中都有管理的時區支持,例如在LocaleContext中
3.7常規Web改進
部署到Servlet 2.5服務器仍然是一個選擇,但Spring框架4.0現在主要關注於Servlet 3.0+環境。如果您正在使用Spring MVC測試框架,您將需要確保Servlet 3.0兼容JAR在您的測試類路徑中。
除了后來提到的WebSocket支持之外,對Spring的Web模塊進行了以下的全面改進:
1、您可以使用新的@restcontroller注釋來使用Spring MVC應用程序,從而消除了將@responsebody添加到每個@requestmapping方法的需要。
2、添加了AsyncRestTemplate類,在開發REST客戶端時允許非阻塞異步支持。
3、Spring現在在開發Spring MVC應用程序時提供了全面的時區支持。
3.8 WebSocket,SockJS和STOMP Messaging
一個新的spring websocket模塊為web應用程序中的客戶端和服務器之間的基於web的雙向通信提供了全面的支持。它兼容jsr-356,Java WebSocket API,並且提供了基於sockjs的回退選項(即WebSocket仿真),用於在不支持WebSocket協議的瀏覽器中使用(例如Internet Explorer小於10的版本)。
一個新的spring-messaging模塊添加了對STOMP的支持,這是在應用程序中使用的WebSocket子協議,以及一個用於從WebSocket客戶端路由和處理STOMP消息的注釋編程模型。因此,@controller現在可以同時包含@RequestMapping@MessageMapping方法,用於處理來自網絡連接的客戶機的HTTP請求和消息。新的spring-messaging模塊還包含了以前從Spring Integration項目中提取的關鍵抽象,比如 MessageMessageChannelMessageHandler等,作為基於消息應用程序的基礎。
要了解更多細節,包括更全面的介紹,請參閱第25章“WebSocket支持”一節。
3.9測試改進
除了在spring-test模塊中對已廢棄的代碼進行整理之外,Spring Framework 4.0還引入了一些用於單元和集成測試的新特性。
1、幾乎所有的注解都可用在spring-test模塊中(如:@ContextConfiguration@WebAppConfiguration@ContextHierarchy@ActiveProfiles等。),現在可以作為元注解來創建定制的自定義復合注釋,並在測試中減少重復配置。
2、現在,通過實現一個定制的activepro文件解析器並通過@activeprofiles的解析器屬性來注冊它,可以通過編程方式解決活動bean定義概要文件。
3、在spring核心模塊中引入了一個新的SocketUtils類,它允許您在本地主機上掃描免費的TCP和UDP服務器端口。這一功能並不是特定於測試的,但在編寫需要使用套接字的集成測試時,可以證明非常有用,例如啟動內存中的SMTP服務器、FTP服務器、Servlet容器等的測試。
4、在Spring 4.0中,org.springframework.mock.web包現在是基於Servlet 3.0 API的。此外,還有幾個Servlet API模擬(例如:MockHttpServletRequestMockServletContextt等)更新了一些小的改進和改進的可配置性。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM