基于注解驅(qū)動(dòng)的Struts_Spring_Hibernate開發(fā)框架_第1頁
基于注解驅(qū)動(dòng)的Struts_Spring_Hibernate開發(fā)框架_第2頁
基于注解驅(qū)動(dòng)的Struts_Spring_Hibernate開發(fā)框架_第3頁
基于注解驅(qū)動(dòng)的Struts_Spring_Hibernate開發(fā)框架_第4頁
基于注解驅(qū)動(dòng)的Struts_Spring_Hibernate開發(fā)框架_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于注解驅(qū)動(dòng)的Struts_Spring_Hibernate開發(fā)框架摘要:隨著Java開源框架不斷引進(jìn)對(duì)注解(Annotation)的支持,使得開發(fā)人員可以用單方面去管理類及其之間關(guān)系,而不用像以往以XML配置文件的方式那樣,一旦遇到問題,就要不斷在Java視圖和XML視圖中切換。基于注解驅(qū)動(dòng)的方式,大大減少了Struts、Spring、Hibernate的XML配置,配置與代碼集中在同一個(gè)地方,可以很敏捷的進(jìn)行即時(shí)反射,是架構(gòu)輕量級(jí)Java Web應(yīng)用的很好選擇。關(guān)鍵詞:Struts;Spring;Hibernate;注解(Annotation)1. 引言Struts + Spring +

2、Hibernate是目前國內(nèi)外主流Java Web應(yīng)用開發(fā)框架之一。Struts作為前臺(tái)控制框架簡化了程序的開發(fā),使頁面設(shè)計(jì)人員和Java程序編寫人員達(dá)到有效的分離,降低系統(tǒng)架構(gòu)的耦合性。Hibernate是一個(gè)O/R Mapping持久層框架的輕量級(jí)組件,對(duì)持久層進(jìn)行了輕量級(jí)封裝,降低了程序的復(fù)雜度。Spring作為一個(gè)應(yīng)用于所有層面綜合框架,具有強(qiáng)大的應(yīng)用功能及靈活性,非常適合作為一些大規(guī)模軟件項(xiàng)目的底層平臺(tái)。隨著Java開源框架不斷引進(jìn)對(duì)Annotation的支持,其傳統(tǒng)的XML配置方式與Annotation配置方式相對(duì)比,傳統(tǒng)的XML的配置方式的缺點(diǎn)是:代碼與配置的分開,必須維護(hù)兩份相

3、對(duì)應(yīng)的代碼(配置也可以認(rèn)為是一種代碼),相對(duì)比較煩瑣,而Annotation方式代碼與配置集中在同一個(gè)地方,修改比較方便,以很敏捷的進(jìn)行即時(shí)反射,是架構(gòu)輕量級(jí)Java Web應(yīng)用的很好選擇。育兒圈平臺(tái)就是基于Annotation的方式架構(gòu)的。2. Struts + Spring + Hibernate的體系架構(gòu)大部分Web應(yīng)用都可以按照職責(zé)分為表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和領(lǐng)域模型層,每一層負(fù)責(zé)整個(gè)應(yīng)用不同方面的職責(zé),并且不應(yīng)該和其他層有功能上的混合,應(yīng)當(dāng)每一層都應(yīng)該和其他層隔離,只允許通過明確的接口在層與層之間進(jìn)行通訊。下圖是基于Struts + Spring + Hibernate框架的

4、基本體系架構(gòu)圖:圖1 Struts + Spring + Hibernate框架的基本體系架構(gòu)圖表現(xiàn)層采用Struts框架,它執(zhí)行如下的功能:1 管理客戶端的請(qǐng)求并做出相應(yīng)的應(yīng)答。2 提供一個(gè)控制器,管理分派調(diào)用業(yè)務(wù)邏輯和其他上層處理。3 驗(yàn)證用戶輸入,確保用戶輸入的信息合法有效。4 處理異常,將所有異常拋給Struts Action統(tǒng)一處理。業(yè)務(wù)邏輯層采用Spring框架,它負(fù)責(zé)如下的功能:1 處理應(yīng)用程序的業(yè)務(wù)邏輯和業(yè)務(wù)校驗(yàn)。2 統(tǒng)一管理事物。3 提供與其他相互作用的接口。4 管理業(yè)務(wù)級(jí)別的對(duì)象的依賴。5 在表現(xiàn)層和數(shù)據(jù)持久層之間增加了一個(gè)靈活的機(jī)制,避免兩者的直接聯(lián)系,實(shí)現(xiàn)松耦合編程。6

5、 在數(shù)據(jù)持久層上,構(gòu)造出業(yè)務(wù)邏輯的上下文,提供業(yè)務(wù)邏輯服務(wù)。7 管理基于數(shù)據(jù)持久層的業(yè)務(wù)邏輯的實(shí)現(xiàn)。數(shù)據(jù)持久層的作用是讓數(shù)據(jù)持久保留下來以及把持久保存的數(shù)據(jù)讀取出來。數(shù)據(jù)持久層采用目前比較成熟的Hibernate框架,它為Java提供對(duì)象模型到關(guān)系模型的持久化和查詢服務(wù)。Hibernate執(zhí)行如下功能:查詢關(guān)系數(shù)據(jù)以得到對(duì)象。執(zhí)行數(shù)據(jù)的保存、修改和刪除操作。領(lǐng)域模型層由實(shí)際需求中的業(yè)務(wù)對(duì)象組成。域模型層使得程序員能以自然的面向?qū)ο蟮姆绞焦ぷ?,而不需要額外的編碼。域模型層主要的作用是提供一個(gè)在不同層之間轉(zhuǎn)移的對(duì)象集合。3. 在Struts_Spring_Hibernate架構(gòu)中使用Annotat

6、ion3.1實(shí)體類的Annotation配置例如平臺(tái)中的空間留言表實(shí)體類,其基于Annotation配置方式的代碼如下圖所示:其中:Entity定義Spacemessage類為實(shí)體類,Table定義該實(shí)體類在數(shù)據(jù)庫中對(duì)應(yīng)的表名。Id定義該屬性對(duì)應(yīng)的列為主鍵,SequenceGenerator和GeneratedValue指定主鍵的生成方式為序列生成方式(Oracle)。Column定義該屬性對(duì)應(yīng)表中的列名,以及其他如:unique(是否唯一)、nullable(可否為空)等屬性?;贏nnotation的配置方式省略了每個(gè)實(shí)體類一個(gè)hbm.xml配置文件的煩瑣操作,看起來更加簡潔、明了。3.2

7、 Dao和Manager組件的Annotation配置在育兒圈平臺(tái)中,所有的DAO類都是繼承自一個(gè)通用的泛型DAO類:SimpleHibernateTemplate<T, PK extends Serializable>。DAO和Manager組件基于Annotation方式配置的代碼如下圖所示:其中:Service表示SpacemessageManager類是一個(gè)service組件。Transactional表示使用Spring定義的事務(wù)管理器。Autowired表示Spring自動(dòng)注冊(cè)Bean,并檢查Autowired的屬性已被注入。如上所示,基于Annotation的配置,省

8、略了如下在Spring配置文件中的配置:3.3 Action組件的Annotation配置在育兒圈平臺(tái)中,Action類的配置方式如下(以PostcommentAction為例):其中,ParentPackage("default")表示PostcommentAction在Struts中所屬的包繼承自名為“default”的包(default包在struts.xml文件中配置)。當(dāng)然,除了ParentPackage注解外,還有Results(注解響應(yīng)結(jié)果)、RequiredStringValidator(必填字符串驗(yàn)證)等注解,大大方便了我們處理表單信息的校驗(yàn)。Struts

9、.xml配置文件的配置如下:這里,struts.codebehind.pathPrefix屬性的value值為頁面文件的根路徑。當(dāng)然這里有一個(gè)約定,返回頁面的路徑為struts.codebehind.pathPrefix的value + PackageNamespace + ActionName + ActionReturntype + .ftl(因?yàn)橛齼喝ζ脚_(tái)使用Freemarker模板文件作為視圖表現(xiàn)方式,所以后綴名為ftl)。當(dāng)Action的執(zhí)行結(jié)果為SUCCESS時(shí),ActionReturntype的值為空。所以,當(dāng)blog.PostcommentAction執(zhí)行結(jié)果為SUCCESS時(shí)

10、,其對(duì)應(yīng)的模板文件為:/WEB-INF/template/blog/postcomment.ftl。3.4 使用Annotation方式的配置文件當(dāng)然,使用Annotation方式并不是說不要任何的XML配置文件,只是大大地簡化了而已,一些全局的、基本的配置還是需要的。例如:數(shù)據(jù)源,Hibernate的SessionFactory等,常用的配置如下:1) 讓Spring通過自動(dòng)掃描來查詢和管理Bean其中,base-package屬性定義了要掃描的包。2) Spring中的數(shù)據(jù)源配置3) Spring中的Hibernate的SessionFactory配置其中,packagesToScan屬性

11、定義了要掃描的包。4) Spring中的事務(wù)配置5) web.xml文件配置當(dāng)然,還不要忘了在web.xml中配置Spring和Struts。主要的配置如下圖所示:其中,actionPackages屬性定義了要以Annotion方式掃描的Action類的基本包目錄。4. 結(jié)束語本文描述了基于注解(Annotation)驅(qū)動(dòng)的SSH(Struts + Spring +Hibernate)開發(fā)框架。并結(jié)合育兒圈平臺(tái)介紹了基本的基于Annotation的配置方式,如:實(shí)體類配置、DAO和Manager組件配置、Action組件配置等。隨著Annotation的流行,Annotation漸有取代XML的配置作用之勢(shì),反對(duì)者有之,贊成者有之。雖然與傳統(tǒng)的XML的配置方式相對(duì)比,Annotation方式有其自身的一些優(yōu)點(diǎn),如配置簡單,配置與代碼本身集中在同一個(gè)地方,修改比較方便等等。但是,Annotation不是萬能的,它也有令人詬病的地方是,如:對(duì)Annotation的修改必須重新編譯代碼。因此,需要根據(jù)項(xiàng)目的需求,結(jié)合使用Annotation與XML。配置的使用原則:大部分情況下,配置是很少會(huì)變更的,特別是像服務(wù)類之間的相互依賴,因此對(duì)這部分可以使用Annotation的配置方式以簡化開發(fā),同時(shí)提供一些擴(kuò)展以方便當(dāng)需要特殊配置時(shí),也能夠方便處理;對(duì)一些變更機(jī)率比較大的部分,如全局系

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論