Spring參考手冊-第二章 Spring2.0中的新特性

 

 

JDK支持:
Spring框架支持包括JDK1.3在內的所有JDK版本,JDK1.3、1.4和1.5均支持,但如果使用JDK1.3的話,某些Spring的高級功能可能無法使用。
2.1緒論
如果你一直在使用Spring框架,你應該知道Spring剛發佈了主版本。該版本包括許多新的特性,並且許多現有功能被重新優化、修正。實際上,Spring框架已經足夠完善,所以Spring開發團隊決定增加Spring的下一個發佈版本的版本號;這樣,Spring2.0於2005年12月在弗羅裏達州召開的Spring Experience會議上發佈。
本週主要介紹了Spring2.0的新的和被優化的特性。目的是通過對於新特性的總結、介紹,使得那些經驗豐富的Spring架構師和開發者們能夠快速的瞭解Spring2.0的新功能。要進一步瞭解這些新特性,請參考本章的相關超鏈接。
下面提及的一些新的特性已經(或者將要)被固化到Spring1.2.x版本線裏,可以參考1.2.x發佈版的changelogs進一步瞭解。
2.2反轉控制容器(IoC Container
IoC容器是2.0中重點升級、優化的特性之一。
2.2.1更便捷的XML配置
由於基於XML Schema技術的XML配置語法的出現,使得Spring的XML配置變得更加容易。如果你要利用Spring提供的新的標籤(tags)(Spring團隊建議你最好使用新的標籤,因爲使得配置文件不再冗長且易於閱讀),那麼請參考附錄A,XML Schema-Based配置。
如果你不能利用XML-Schema配置方式,你可以利用爲Spring2.0新升級的DTD。下面給出DOCTYPE聲明以便於你在配置文件中引用,當然,感興趣的讀者可以閱讀包含在Spring2.0分發的“dist/resources”目錄下面的DTD文件(spring-beans-2.0.dtd)。

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
               "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
 
 
2.2.2新的Bean的範圍
Spring的以前版本在IoC容器級別支持兩種不同的Bean的範圍(singleton和prototype)。依賴於分發Spring的環境,Spring2.0提供了許多新的Bean的範圍(例如,Web環境下的request和session beans),同時,提供“hooks”(希望能有更好的命名),Spring用戶可以使用它來創建自己的Bean的範圍。
應該說明一點,儘管對於singleton-和prototype-兩種範圍的beans的內部實現方式在Spring2.0中已經發生了改變,但這種改變對於用戶來說是透明的。也就是說,現有的配置信息不需要修改,也不會被破壞。
新的beans範圍在3.4節“Bean範圍”有詳細描述。
2.2.3可擴展的XML驗證機制
新版本的XML配置不但易於寫,而且易於擴展。
“擴展性”意味着:作爲應用開發者、或者作爲第三方的框架或者產品可以訂製標籤(tags),這樣別的開發者就可以將這些訂製的標籤應用到自己的Spring配置文件。這樣你就可以在你自己的組件配置文件中加入你自己的業務模型描述語言(這個詞彙不太準確)。
訂製Spring標籤可能並非對於每個應用開發者或者企業架構師都是令人感興趣的事情。我們期待着第三方的廠家能夠有興趣定製開發Spring配置文件中使用的標籤。
擴展的配置機制在附錄B,擴展的XML認證一章中有詳細介紹。
2.3面向切面編程(AOP
Spring2.0提供了AOP支持。Spring的AOP框架很便於在XML文件中配置,並且配置也不復雜、冗長;並且Spring2.0集成了AspectJ pointcut語言和AspectJ切面申明類型。
2.3.1方便的AOP XML配置
結合規則的Java對象的使用,Spring2.0提供了新的Schema支持來定義aspects。該特性利用了AspectJ pointcut語言,並且提供了完全類型的advice。具體細節可參照6.3章,“基於Schema的AOP支持”。
2.3.2支持@AspectJ aspects
Spring2.0也支持@AspectJ定義的aspects。這些切面可以在AspectJ和Spring AOP之間共享,但同時只要求很簡單的配置。細節在6.2章,“@AspectJ支持”中有詳細描述。
2.4中間層
2.4.1便捷的基於XML的事務管理配置
在Spring2.0中,對於事務管理的配置方式已經發生了重大的改變。1.2.x版本的配置方式依然被支持,但新的配置方式相比更簡單,也是我們建議的配置方式。Spring2.0也包含了AspectJ的鏈接庫,這使得你幾乎可以事務化任何對象,甚至包括那些並不是由Spring IoC容器創建的對象。
第9章,“事務管理”詳細描述了這部分內容。
2.4.2JPA
Spring2.0包含了JPA抽象層,在使用方式上類似於Spring的JDBC抽象層。
如果你想要把JPA作爲你的持久層的底層實現的話,第12.6章,JPA,詳細描述了Spring中如何使用JPA。
2.4.3異步的JMS
Spring2.0之前,Spring的JMS僅限於支持消息發送和同步的消息接收。這個功能(封裝在JmsTemplate類中)是十分重要的,但是它並沒有實現對於異步消息接收的支持。
Spring2.0現在完全實現了異步方式的消息接收機制,細節請參照第19.4.2章,“異步接收-消息驅動的POJOs”。
2.4.4JDBC
在Spring框架的JDBC庫中,包含了一些很小的類(但值得一提)。第一個,“NamedParameterJdbcTemplate”類,相比原來的使用站位符(?)來描述JDBC申明的方式,它提供了基於命名參數的方式來描述JDBC申明。
另外一個類是SimpleJdbcTemplate,在開發Java5(Tiger)的應用時,可以更方便的使用類JdbcTemplate。
2.5 Web表現層
Web表現層在Spring2.0中作了充分的優化和擴展。
2.5.1 Spring MVC的窗體標籤庫
Spring MVC的豐富的JSP標籤庫支持在JIRA(基於J2EE的開源問題跟蹤系統)中,獲得了Spring用戶做多的票數。
Spring2.0提供了豐富特性的JSP標籤庫,這使得你在使用Spring MVC的時候,可以很方便的創建JSP頁面。Spring團隊自信的認爲這個標籤庫將會能夠使那些在JIRA中爲它投票的開發者們很滿意。第13.9章,“使用Spring的窗體標籤庫”和附錄E,“spring-form.dtd”提供了詳細的描述。
2.5.2 Spring MVC的默認配置
對於許多項目工程來說,依據慣例形成默認的配置信息是十分必要的。目前Spring MVC對於“默認配置”(convention-over-configuration)提供了有力的支持。這意味着,如果你爲你的Controller和views建立了一套命名規則的話,你就可以大量的減少用來完成處理映射,視圖解析和ModelAndView實例的XML配置內容。這點對於需要進行快速原型開發的項目來說是個巨大的好處,同時也可以保持代碼的一致性。Spring MVC的“默認配置”的詳細內容請參考第13.11,“默認配置”(Convention over configuration)。
2.5.3 Portlet框架
Spring2.0包含了一個叫做“Portlet”的框架,有點類似於Spring的MVC框架。關於它的細節可以在第16章,Portlet MVC框架中查找。
2.6 補充
下面的內容簡述了包含在Spring2.0中的其他的一些新的特性和功能。
2.6.1動態語言支持
Spring2.0目前支持的beans書寫語言,除了Java之外,還包括動態語言,如JRuby,Groovy和BeanShell。細節可參閱第24章,動態語言支持。
2.6.2 JMX
Spring框架目前提供了對於Notifications的支持;基於MBeanServer,它提供了對於MBeans的註冊行爲進行控制的可能。
參考:第20.7章,“Notifications”
      第20.2.5章,“控制註冊行爲”
2.6.3任務調度
Spring2.0對於任務調度提供了抽象。感興趣的開發者可以參考第23.4章,“Spring任務執行抽象”。
2.6.4 Java5Tiger)支持
如果你在使用Java5(Tiger)開發項目,那麼現在告訴你Spring2.0對Tiger提供了相當的支持。下面是對Java5的詳細支持細節。
第9.5.8章,“使用AspectJ的@Transactional”
第6.8.1章,“結合AspectJ使用依賴注射的業務對象”
第6.2章,“@AspectJ支持”
第25.3.1章,“@Required”
第11.2.3章,“SimpleJdbcTemplate”
2.7 遷移到Spring2.0
最後介紹一下從Spring1.2.x遷移到Spring2.0時可能出現的一些問題。
從Spring1.2遷移到Spring2.0“應該”是簡單的將Spring2.0的jar文件放到你應用的合適的目錄就可以了。
注意這裏用的關鍵字是“應該”。無論升級是無縫的,還是依賴於你在代碼中使用了多少的Spring API。Spring2.0幾乎移除了所有在Spring1.2.x中的類和方法,當然,你得使用代替的類和方法(下面總結了一些)。
說到配置,Spring1.2.x的XML配置方式100%和Spring2.0兼容。當然,如果你仍然使用Spring1.2.x的DTD,那麼你不能使用Spring2.0中的一些新功能(如scopes、便捷的AOP和事務配置),但也不會有什麼其他影響。
推薦的遷移策略是,你最好先將Spring2.0的jar放到應用目錄,這樣可以獲得在新版本中的一些優化的代碼支持(bug修正、優化等)。然後,你可以逐步的選擇使用Spring2.0的新特性和配置。例如,你可以選擇以Spring2.0方式來配置你的aspect,實際上,在你最終的配置信息中包含90%的1.2.x和10%的Spring2.0配置方式是完全合法的。記住,Spring2.0並不強迫你完全將你的XML配置信息變成Spring2.0方式的。
2.7.1變更
要了解變更的詳細情況,請參考Spring2.0目錄的changelog.txt文件。
2.7.1.1 Jar打包
Spring2.0打包方式已經完全不同於Spring1.2.x。現在JDO單獨打包,Hibernate打包了2/3,包括ORM:目前的版本中它們不再被捆綁在spring.jar中。
2.7.1.2 XML配置
相比以前版本,Spring2.0發佈了更多的XSDs來描述Spring的XML元數據(metadata)格式。
舊的DTD仍然支持,但如果可能你最好在你的Bean定義文件的頭部包含對於這些XSD文件的引用。
另外一個重點的變更是關於Bean範圍的定義方式。如果你使用Spring1.2DTD,那麼你仍然可以使用‘singleton’屬性。同時,你可以引用Spring2.0DTD,這不允許你使用‘singleton’屬性,但你可以使用‘scope’屬性來定義bean的生命週期範圍。
2.7.1.3 去除的類和方法
在以前版本中標示爲“@deprecated”的許多類和方法在Spring2.0中已經被移除。Spring2.0團隊決定建立一個新的代碼基線,並且更完全的移除那些該移除的東西,而不是像以前那樣總是在代碼中若隱若現的出現。
下面的類和接口在Spring2.0中已經完全移除:
l         ResultReader:用RowMapper代替
l         BeanReferenceFactoryBean:用別名機制代替
l         BeanDefinitionRegistryBuilder:用BeanDefinitionReaderUtils的默認方法代替
l         BeanFactoryBootstrap:考慮使用BeanFactoryLocator或者一個定製的bootstrap類代替
l         RequestUtils:用ServletRequestUtils代替
2.7.1.4 Apache OJB
注意對於Apache OJB的支持在Spring框架中已經移除,但Apache OJB的鏈接庫仍然可以使用,你可以在Spring Modules項目中找到它。
2.7.1.5 iBatis
對於iBatis SQL Maps1.3版本的支持已經完全移除。請升級到iBatis SQL Maps 2.0/2.1。
2.8 最新的例子應用
有大量的例子應用來展示Spring2.0的新特性,你可以慢慢研究它們。你可以在Spring(spring-with-dependecies.[zip|tar.gz])的Samples目錄找到它們。
此外,還包括大量的號稱展示(showcase)應用。每個展示應用關注Spring2.0的某個新的特性方面。你可以研究這些例子應用的代碼,不必每次都去創建一個新的Spring2.0應用。經過考慮,在這些例子中可能故意忽略了一些內容;如業務模型可能只由1到2個類組成,而其中的安全和事務管理部分內容可能被忽略了。
2.9 優化的文檔
Spring參考手冊已經針對2.0版本的新特性作了完全的更新。
然而,經過作了很多努力盡量避免在文檔中出現錯誤,但仍然可能會出現錯誤。如果你發現了任何錯誤,並且你有一些時間的話,請將錯誤發佈的rasing an issue
最後,爲Arthur Loder在Spring框架參考手冊和Javadocs資料的校對工作上所作的不知疲倦的努力表示特別的感謝!
 
發佈了28 篇原創文章 · 獲贊 6 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章