[摘]struts+spring+hibernate之間的關係與差別(ZT)

linweihan1984發表於2007-10-16

Struts:用來作VC部分,即控制和顯示作用;
Spring:用來作資料庫操作的事務處理,在配置檔案裡配置好就OK了;
Hibernate:用來作DAO處理,在此用了Spring的getHibernateTemplate()方法來操作hsql進行資料增刪改等操作


1,先說說你的表示層
其實沒有必要使用struts,除非你有歷史遺留問題不得不用struts,因為spring的mvc已經足夠好了:
a.清晰的模型物件傳遞,這個模型物件可以是任何java物件,如果你不在意在各層之間傳遞同一個物件的話,這個模型物件就可以是hibernate的persistent object,通過open session in view,你可以以一致的方式使用業務模型物件。
b.reference data,讓你清晰的處理look up資料。
c. 多種可供選擇的檢視解析型別,可以在prpperties檔案中定義page的邏輯名,或者定義在xml檔案裡的struts tiles邏輯名。
d.無干擾的資料繫結,一個<spring:bind>可以對模型物件和form進行繫結,就像struts自動填充formbean一樣,但spring 的繫結功能不會干擾介面佈局,也就是說,你仍然可以使用html編輯器對頁面進行處理。
e.客戶端驗證。
f.伺服器端驗證。
g.多種可供選擇的控制器,其中支援表單的控制器提供了類似vb中表單事件處理的功能,這是一系列的workflow,在你認為合適的地方,插入你的處理程式碼。

spring mvc與struts比較,可能只是少了很多taglib和頁面佈局,但這都可以通過第三方工具補充,因為檢視相比於其他部分,畢竟更輕量級一些。可以選擇的第三方工具可以是:displaytag,struts-menu,struts tiles,等等。

2,在說說業務邏輯部分
業務邏輯類可以用spring的beans進行配置,並由spring管理與表現層的控制器及更下層的DAO物件的關係。另外,還可以進行配置性的事務處理,一個interceptor配置,免去了你的所有煩惱。

3,dao層
用spring 封裝後的hibernate API,讓Hibernate繼續瘦身,並且通過spring建立與上層的關係。

4,最後,說說hibernate的po
你可以選擇你喜歡的任何方式進行建模,以下工具提供了足夠的支援:
a. 從java物件到hbm檔案:xdoclet
b. 從hbm檔案到java物件:hibernate extension
c. 從資料庫到hbm檔案:middlegen
d. 從hbm檔案到資料庫:SchemaExport

至於可供參考的專案,可以看看spring的例子petclinic(spring+hibernate),還有一個不可不看的網站:http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse(struts+spring+hibernate或spring mvc + spring +hibernate)。另外,spring帶的mvc step-by-step是一個很好的入門教程。

需要說明的是,spring僅僅為我們提供了一種設計和實現框架的方式,因此,專案的成功與否,是與我們的構架設計緊密相關的,在有了好的設計思想以後,善用spring,會讓我們的成功來的更容易。

相關文章