在SpringSide的官方主頁上,寫著SpringSide 3 中包含的主流組件:Spring 2.5 + Hibernate 3 + Struts 2 + JSP 2.0 + JQuery + JAX-WS 2 (by Apache CXF 2) +SpringSecurity 2.0。不過,如果你認(rèn)為和SpringSide 2 相比,升級(jí)的只是版本號(hào),那么你就大錯(cuò)特錯(cuò)了。
像我這樣從SpringSide 2過來的人,如果能夠詳細(xì)對(duì)比SpringSide 2 和SpringSide 3,對(duì)于我們理解SpringSide 3肯定更加有幫助。下面的內(nèi)容是我自己的一些體會(huì),不正確的地方歡迎大家指正。
從主要的架構(gòu)來,依然是那么幾層,先設(shè)計(jì)數(shù)據(jù)庫,再寫Entity層,再寫Dao層,再寫Action,然后使用JSP表現(xiàn)出來,其中的Entity和Dao層和Hibernate緊密相關(guān),Action是Struts的主要部分,Spring作為粘合劑,把這些東西連在一起,并提供了一些機(jī)制簡(jiǎn)化編寫這些層的工作。SpringSide就是這樣一個(gè)大的粘合體,省去了我們自己很多的粘合工作。從SpringSide 2 到SpringSide 3,這些工作得到進(jìn)一步的簡(jiǎn)化,我們開發(fā)起來就更爽了。
我認(rèn)為,我們的開發(fā)模式,主要經(jīng)歷了這樣的簡(jiǎn)化過程:
第一階段,代碼加一大堆的配置文件第二階段,代碼加少量的配置文件第三階段,代碼加基本上等于零的配置文件
這些進(jìn)步是如何實(shí)現(xiàn)的呢?從第一階段到第二階段,主要靠的是Annotation,把一些大量的配置工作轉(zhuǎn)移到了Java代碼中,那么從第二階段到第三階段怎么實(shí)現(xiàn)呢?都已經(jīng)Annotation了,你還有什么辦法讓配置文件更少?想不到吧!我也想不到,直到我看了SpringSide 3生成的項(xiàng)目,我才知道還有一個(gè)好東西叫自動(dòng)掃描。
下面使用實(shí)際的例子進(jìn)行說明。作為示例,Hibernate是個(gè)不錯(cuò)的選擇。
第一階段,如果單獨(dú)使用Hibernate,我們每寫一個(gè)Entity類,就得同時(shí)寫一個(gè).hbm.xml文件,如果有很多Entity,就得寫很多.hbm.xml文件,每修改一次Entity,也要同時(shí)記得修改.hbm.xml文件,相當(dāng)?shù)牟环奖悖淠夸浗Y(jié)構(gòu)如下圖:

第二階段,使用Annotation,SpringSide 2 中就是這樣的方式。具體內(nèi)容可以看我的另一篇博文《打通持久層的任督二脈》。所以我用SpringSide 2? 進(jìn)行開發(fā)的時(shí)候,寫Entity也是兩個(gè)步驟,但是比第一階段要簡(jiǎn)單。就是先寫一個(gè)Entity,Entity里面使用Annotation,如下圖:

然后修改配置文件,SpringSide 2 中專門為Hibernate的定義開辟了一個(gè)專門的xml文件dataAccessContext-hibernate.xml,里面關(guān)于SessionFactory的定義是我們很熟悉的。我只需要將我的Entity類加入到里面就可以了,如下圖中紅筆圈出來的部分:

第二階段和第一階段相比,配置文件簡(jiǎn)單多了,不需要維護(hù)那么多的.hbm.xml。但是,每編寫一個(gè)Entity,依然需要修改一下配置文件。
第三階段就更了不起了,零配置文件,也就是說我們只管寫Entity就行了,不需要管配置文件(當(dāng)然,項(xiàng)目開始的時(shí)候還是要配置一次的)。打開SpringSide 3生成的項(xiàng)目,果然找不到dataAccessContext-hibernate.xml文件。那么是如何實(shí)現(xiàn)零配置的呢?靠的就是自動(dòng)掃描,如下圖中紅筆圈出來的部分:

上面講Hibernate只是為了舉例說明我的觀點(diǎn),
事實(shí)上SpringSide 3 中的零配置可不僅僅只存在這一個(gè)地方。
Dao層也可以不用配置了。在SpringSide 2 中,我們每寫一個(gè)Dao,都需要在serviceContext.xml中加入這個(gè)類,如下圖:

SpringSide 3 中使用自動(dòng)掃描了,如下圖:

以后編寫Service后,再也不用修改配置文件了,只要我們?cè)赟ervice中使用如下Annotation:
事務(wù)也不用配置了,在SpringSide 2 中,事務(wù)是這樣配置的:

SpringSide 3 中,事務(wù)配置是這樣的:

Action也不用配置了,不過使得Action零配置的代碼卻在web.xml中,如下圖:

還記得SpringSide 2 中的Struts配置代碼嗎?編寫完Action類的代碼后,還需要修改兩個(gè)配置文件,如下:


所以說,SpringSide 3 的一個(gè)優(yōu)點(diǎn)就是讓生活變得更加簡(jiǎn)單了。在以上的截圖中,SpringSide 2 項(xiàng)目用的是Eclipse 3.2,而SpringSide 3項(xiàng)目用的是Eclipse 3.4 For JavaEE Developers。哪一個(gè)IDE更爽,那也是一目了然。