原文地址:http://www.infoq.com/news/2009/12/spring30
同志們,Spring框架的3.0版本終于在今天發(fā)布啦。InfoQ特別對(duì)話了Spring框架項(xiàng)目的技術(shù)頭領(lǐng)Juergen Hoeller,從他口中了解到不少關(guān)于這次發(fā)布對(duì)Spring集團(tuán)帶來的改變。
Hoeller詳細(xì)羅列了Spring 3.0中的各項(xiàng)新特性:
* 基于Java 5 - 目前核心API已經(jīng)使用了Java 5的特性,諸如泛型、注解等等,因此現(xiàn)在Spring 3.0必須使用Java 5和以后版本才能跑起來。
* Spring表達(dá)式語言(SpEL) - 這個(gè)和JSF中的統(tǒng)一EL類似,我們可以很容易在Spring 3.0中使用復(fù)雜表達(dá)式了。
* 提升對(duì)基于注解組件的支持 - Spring JavaConfig其中的一些功能已經(jīng)被遷移到核心框架中,比如@Configuration,@Bean和@DependsOn。
* 可以使用約束注解聲明對(duì)模型的校驗(yàn)方式 - 提供了對(duì)JSR 303的支持,我們可以使用注解為bean添加諸如@NotNull和@Max(23)的校驗(yàn)規(guī)則。
* Spring MVC中提供對(duì)REST的綜合支持 - 添加了在服務(wù)器端和客戶端使用RESTful應(yīng)用的功能。
* 提供對(duì)Java EE 6的支持 - 支持了許多Java EE 6中的功能,比如JPA 2.0和JSF 2.0,讓它們可以運(yùn)行在非EE 6的容器下,比如Tomcat和J2EE 1.4應(yīng)用服務(wù)器。
* 提供對(duì)JSR 330的支持 - 現(xiàn)在Spring已經(jīng)支持了JSR 330中介紹的javax.inject注解。
* 基于注解進(jìn)行格式化 - bean的屬性可以使用注解來自動(dòng)進(jìn)行格式化和類型轉(zhuǎn)換,比如@DateFimeFormat(iso=ISO.DATE)和@NumberFormat(style=Style.CURRENCY)。
Spring還提供了完整的修改日志和參考文檔。(譯者注:文檔方面Spring做的確實(shí)太好了,也再次感謝滿江紅團(tuán)隊(duì)的辛勤勞動(dòng)。)
Hoeller在提到SpEL時(shí),多說了那么幾句:
SpEL是一種功能強(qiáng)大的表達(dá)式語言,語法基于統(tǒng)一表達(dá)式(Unified
EL),實(shí)際上它與JSF中使用的表達(dá)式非常類似。我們特別為SpEL開發(fā)了自己的表達(dá)式解析器以提供特定的功能,無論是在使用bean定義配置還是使用
Spring
Integration這類項(xiàng)目時(shí)都可以帶來不少好處。其實(shí)在Spring核心中已經(jīng)有很多地方都應(yīng)用了像"#{...}"這樣的表達(dá)式,可以在XML的
bean定義中看到許多這樣的例子。還有@Value這個(gè)注解,它可以通過名稱動(dòng)態(tài)引用其他的bean,并且可以非常簡(jiǎn)單就獲取這些bean的屬性。
舉個(gè)例子,下面這段XML配置(來自3.0參考文檔)使用了SpEL來配置bean的屬性,屬性值來自于JVM系統(tǒng)參數(shù):
<bean class="mycompany.RewardsTestDatabase">
<property name="databaseName"
value="#{systemProperties.databaseName}"/>
<property name="keyGenerator"
value="#{strategyBean.databaseKeyGenerator}"/>
</bean>
Hoeller也著重介紹了Spring 3.0中對(duì)REST的支持:
我們面對(duì)的挑戰(zhàn)是在Spring
MVC的世界中加入對(duì)REST的支持,把這種強(qiáng)大的新功能交到MVC用戶的手中。我們決定從底層為MVC支持路徑變量的提取 -
這部分內(nèi)容協(xié)商的方向是正確的 - 考慮到Spring
MVC的實(shí)力,并把它們拉升到另一種層次,同時(shí)又不會(huì)破壞基本架構(gòu)。工作進(jìn)展的非常順利,可以在已有的Spring MVC應(yīng)用中使用REST的特性。
我們的重點(diǎn)聚焦在web用戶接口在REST下的轉(zhuǎn)換方式上。下一步呢,在Spring MVC的基礎(chǔ)上實(shí)現(xiàn)基于REST的網(wǎng)絡(luò)服務(wù)(Web
Service)也是很有意思的一件事情,特別是OXM(Object/XML
Mapping)現(xiàn)在已經(jīng)成為了Spring核心模塊之一,OXM可以和Spring
MVC聯(lián)合應(yīng)用。最后,我們提供了RestTemplate類,這是一個(gè)Spring式的模板類,它作為客戶端提供了與面向REST終端服務(wù)器進(jìn)行交互的
更易用的編程方式。
對(duì)于那些工作在Spring 2.5之上,并且已經(jīng)在代碼中使用了基于注解樣式的同志們,這次升級(jí)的路線將是非常平滑的 -
新功能可以在升級(jí)到3.0之后任意選擇使用,不需要對(duì)基礎(chǔ)架構(gòu)進(jìn)行任何修改。對(duì)于那些還在使用老版本,比如繼承了表單控制器,這些功能在3.0中還是可以
繼續(xù)使用的,只是這些功能都已經(jīng)被標(biāo)記為“被廢棄了”(deprecated)。如果想使用3.0中的新特性,就必須先使用基于注解的@MVC樣式。對(duì)于
Spring 2.0用戶,99%的代碼依然可以正常運(yùn)行,但是對(duì)一些老組件的支持,比如Apache Commons Attributes,
WebLogic 8.1 和 WebSphere 5.1,都已經(jīng)被刪除了。
當(dāng)提起Spring框架的未來計(jì)劃時(shí),Hoeller提到開發(fā)會(huì)受到Spring集團(tuán)中的其他項(xiàng)目的很大影響,比如Spring Integration, Spring Web Flow, Spring Source dm Server和Spring Roo等
等。在3.1的發(fā)布的新特性就會(huì)被Spring Integration 2.0和Spring Web
Flow所影響,比如計(jì)劃中的第一類會(huì)話管理(first-class conversation
management),擴(kuò)充作用域(scope)和細(xì)化基于注解的組件模型。2010年中旬中的3.1發(fā)布之后,會(huì)進(jìn)入3.2版本,對(duì)于3.2版本的具
體計(jì)劃還沒有最終完成。