公務(wù)員期刊網(wǎng) 精選范文 spring框架范文

spring框架精選(九篇)

前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的spring框架主題范文,僅供參考,歡迎閱讀并收藏。

spring框架

第1篇:spring框架范文

關(guān)鍵詞 Struts2框架;spring框架;Hibernate框架

中圖分類號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-7597(2013)20-0049-01

1 Struts2、Spring和Hibernate三大框架簡(jiǎn)介

框架是JavaEE開發(fā)領(lǐng)域炙手可熱的一個(gè)名詞。目前技術(shù)領(lǐng)域存在很多種框架技術(shù),能夠有效的解決JavaEE應(yīng)用開發(fā)中很多通用的問題,其中Struts2、Hibernate以及Spring是目前最主流的、使用最廣泛的開源框架,每個(gè)框架專注于解決不同的問題,具有很強(qiáng)的代表性。其中,Struts2框架是一個(gè)MVC框架;Hibernate框架是一個(gè)ORM框架;而Spring框架是一個(gè)綜合性的框架,是一個(gè)輕量級(jí)的解決方案。這三個(gè)框架往往各司其職,在應(yīng)用中的不同層面發(fā)揮其作用。

2 Struts2框架工作原理

Struts2框架已經(jīng)盛行多年,然而Struts2與Struts1之間并不是擴(kuò)展和升級(jí)的關(guān)系。Struts2是著名框架WebWork的擴(kuò)展,WebWork是一個(gè)很優(yōu)秀的MVC框架,但是由于是一個(gè)新興的框架,在一段時(shí)間內(nèi)沒有被廣泛使用。后來,Struts和WebWork社區(qū)決定將二者合并,于是推出了Struts2框架。Struts2框架兼具Struts1和WebWork的優(yōu)點(diǎn),從而得到了廣泛的使用。

Struts2的工作原理比較復(fù)雜:

1)客戶端向服務(wù)器端提交請(qǐng)求,容器初始化HttpServletRequest請(qǐng)求對(duì)象。

2)請(qǐng)求對(duì)象被一系列的Servlet過濾器過濾。Struts2中的過濾器有3種:①ActionContextCleanUp過濾器,是一個(gè)可選的過濾器,主要用來集成其他框架;②其他插件的核心過濾器,譬如:SiteMesh插件的過濾器;③FilterDispatcher過濾器,是Struts2 API中提供的過濾器,是必選的過濾器。

3)FilterDispatcher過濾器調(diào)用ActionMapper,決定該請(qǐng)求是否需要調(diào)用某個(gè)Action。

4)如果請(qǐng)求需要調(diào)用某個(gè)Action,ActionMapper將通知FilterDispatcher過濾器把請(qǐng)求的處理交給ActionProxy來處理。

5)ActionProxy通過Configuration Manager解析框架的配置文件struts.xml,找到需要調(diào)用的Action類。

6)ActionProxy將創(chuàng)建一個(gè)ActionInvocation實(shí)例。

7)ActionInvocation實(shí)例使用命令模式回調(diào)Action中的execute方法,Action調(diào)用業(yè)務(wù)邏輯類完成業(yè)務(wù)邏輯。在調(diào)用Action的前后,將調(diào)用該Action涉及的相關(guān)攔截器。

8)Action執(zhí)行完畢后,ActionInvocation根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果,返回給JSP、FreeMarker等模版文件。

3 Hibernate框架的作用及其對(duì)象狀態(tài)

Hibernate是一個(gè)ORM(Object-Relational Mapping)框架,主要作用是簡(jiǎn)化應(yīng)用的數(shù)據(jù)持久層編程,不需要編程人員花大量的時(shí)間編寫SQL和JDBC代碼??梢姡琀ibernate框架位于應(yīng)用層和數(shù)據(jù)庫之間,解決數(shù)據(jù)持久層編程。Hibernate框架主要包括持久化對(duì)象(persistent Object):是Hibernate框架中非常重要的組成部分,簡(jiǎn)稱為PO。PO用來映射數(shù)據(jù)庫中的記錄,可以通過修改PO來修改數(shù)據(jù)庫記錄;包括Hibernate屬性文件(hibernate.properties):使用Hibernate進(jìn)行數(shù)據(jù)持久層編程,相關(guān)的數(shù)據(jù)庫訪問信息需要在Hibernate屬性文件中配置,譬如,數(shù)據(jù)庫驅(qū)動(dòng)類、連接串、用戶名、密碼等,也可以使用名字為hibernate.cfg.xml的xml文件配置屬性;還包括Hibernate映射文件(XML Mapping):持久化對(duì)象映射數(shù)據(jù)庫中的記錄,其映射關(guān)系依靠Hibernate框架的映射文件配置,映射文件是XML文件,往往使用*.hbm.xml形式命名,其中*是持久化對(duì)象的類名。

Hibernate框架是一個(gè)完整的ORM框架,以對(duì)象為基礎(chǔ),通過操作對(duì)象,進(jìn)一步操作對(duì)象關(guān)聯(lián)的數(shù)據(jù)庫記錄。持久化類與數(shù)據(jù)表對(duì)應(yīng),持久化的對(duì)象則映射數(shù)據(jù)庫記錄。持久化的對(duì)象有三種狀態(tài):瞬時(shí)狀態(tài),當(dāng)通過new操作符實(shí)例化了一個(gè)對(duì)象,而這個(gè)對(duì)象并沒有被Session對(duì)象操作,也就是該對(duì)象沒有與一個(gè)Session對(duì)象關(guān)聯(lián)時(shí),那么這個(gè)對(duì)象就稱為瞬時(shí)狀態(tài)對(duì)象,瞬時(shí)狀態(tài)的對(duì)象與普通對(duì)象沒有區(qū)別,沒有與數(shù)據(jù)庫的記錄有映射關(guān)系;持久狀態(tài),如果一個(gè)對(duì)象與某一個(gè)Session對(duì)象關(guān)聯(lián),例如被Session對(duì)象剛加載的、剛保存的、剛更新的,那么該對(duì)象就稱為持久狀態(tài)對(duì)象。持久狀態(tài)的對(duì)象與數(shù)據(jù)庫中一條數(shù)據(jù)相對(duì)應(yīng),并擁有持久化標(biāo)識(shí)。當(dāng)持久狀態(tài)的對(duì)象有改變時(shí),當(dāng)事務(wù)提交后,Hibernate會(huì)自動(dòng)檢測(cè)到對(duì)象的變化,并持久化到數(shù)據(jù)庫中;脫管狀態(tài),當(dāng)與持久狀態(tài)對(duì)象關(guān)聯(lián)的Session關(guān)閉后,該對(duì)象就變成脫管狀態(tài)。脫管狀態(tài)的對(duì)象引用依然有效,可以繼續(xù)使用,當(dāng)脫管狀態(tài)的對(duì)象再一次與某個(gè)Session關(guān)聯(lián)后,脫管狀態(tài)對(duì)象將轉(zhuǎn)變?yōu)槌志脿顟B(tài),脫管期間進(jìn)行的修改將被持久化到數(shù)據(jù)庫中。

4 Spring框架的模塊

企業(yè)級(jí)應(yīng)用開發(fā)總是涉及方方面面,Spring框架是一個(gè)輕量級(jí)的解決方案,致力于創(chuàng)建“快裝式企業(yè)應(yīng)用”。Spring框架包括一系列的特性,被組織在七個(gè)模塊中,可以把Spring框架看成一個(gè)標(biāo)準(zhǔn)的開發(fā)組件。Spring框架被設(shè)計(jì)成無侵入式的方式,即企業(yè)應(yīng)用可以根據(jù)需要選擇Spring框架中必要的組件,而忽略其他部分,以做到最小范圍依賴的Spring框架。

Spring框架包含了7個(gè)模塊,每個(gè)模塊對(duì)于解決不同的問題。Spring Core模塊:是最核心的模塊,封裝了Spring框架核心包,主要提供了Spring IoC(控制反轉(zhuǎn))容器。IoC是Spring框架的基礎(chǔ),所有其他特性都是基于IoC之上;Spring Context模塊:提供了對(duì)Spring中對(duì)象的框架式訪問方式,并包括國(guó)際化、事件傳播等特性;Spring DAO模塊:提供了JDBC的抽象層,是集成JDBC的封裝包,能夠避免JDBC繁瑣冗長(zhǎng)代碼,同時(shí)還提供了聲明性事務(wù)管理特性;Spring ORM模塊:提供了集成常用ORM框架的封裝包,包括JDO、JPA、Hibernate、iBatis等。使用該模塊可以更為便捷的使用ORM框架,而且還可以同時(shí)使用Spring的其他特性,如聲明性事務(wù)等;Spring Web模塊:提供了Web開發(fā)的一些基礎(chǔ)特性,如上傳文件等,同時(shí)提供了與Web框架集成的封裝包,如集成Struts2框架;Spring AOP模塊:AOP(面向切面編程)是Spring中除了IoC外的另外一個(gè)核心概念,該模塊提供了符合AOP聯(lián)盟規(guī)范的AOP實(shí)現(xiàn),可以降低應(yīng)用的耦合性,提高擴(kuò)展性;Spring MVC模塊:該模塊提供了一個(gè)MVC框架。Spring框架包含了一系列的特性,可以根據(jù)應(yīng)用的具體需要來選擇使用部分組件。Spring框架可以在任何類型的應(yīng)用中使用,譬如:桌面應(yīng)用、Web應(yīng)用、C/S應(yīng)用等。

參考文獻(xiàn)

[1]柯常欽,史毓達(dá).基于SSH框架的Web應(yīng)用系統(tǒng)開發(fā)研究[J].湖北第二師范學(xué)院學(xué)報(bào),2010(08):102-105.

[2]符鈺.基于Struts2+Hibernate3+Spring3框架的Web[J].金華職業(yè)技術(shù)學(xué)院學(xué)報(bào),2013(06):61-64.

第2篇:spring框架范文

著名的軟件大師RalphJohnson對(duì)框架(Framework)進(jìn)行了如下的定義:框架是整個(gè)系統(tǒng)或系統(tǒng)的一部分的可重用設(shè)計(jì),由一組抽象的類及其實(shí)例間的相互作用方式組成,框架一般具有即插即用的可重用性、成熟的穩(wěn)定性以及良好的團(tuán)隊(duì)協(xié)作性。JavaEE復(fù)雜的多層結(jié)構(gòu)決定了大型的JavaEE項(xiàng)目需要運(yùn)用框架和設(shè)計(jì)模式來控制軟件質(zhì)量。Struts、JPA和Spring是JavaEE開發(fā)的3種輕量級(jí)開源項(xiàng)目,它們的出現(xiàn)為開發(fā)人員提供了極大的便利,將開發(fā)人員從簡(jiǎn)單而繁瑣的工作中解脫出來,從而去關(guān)注業(yè)務(wù)邏輯模塊的實(shí)現(xiàn),從而降低了開發(fā)周期。同時(shí),也為系統(tǒng)的性能和安全性提供了保證,提高了系統(tǒng)的擴(kuò)展性和可維護(hù)性。

1.1Struts

Struts作為Apache組織的子項(xiàng)目,是一個(gè)基于MVC(模型—視圖—控制器)設(shè)計(jì)模式的開源框架,其擺脫了傳統(tǒng)Web應(yīng)用開發(fā)模式的束縛,得到了眾多軟件企業(yè)和開發(fā)人員的認(rèn)可,成為MVC模式Web應(yīng)用的首選框架。Struts的模型(Model)分為Action和ActionForm兩個(gè)對(duì)象,由ActionForm封裝交互的數(shù)據(jù)元素,Action完成業(yè)務(wù)處理。視圖(View)由JSP以及Struts標(biāo)簽庫等組成,視圖負(fù)責(zé)前端的頁面及數(shù)據(jù)顯示??刂破?Control-ler)用于管理模型與視圖的交互,控制組件有struts-con-fig.xml和ActionServlet,控制器主要處理發(fā)送到Struts的HTTP請(qǐng)求,把請(qǐng)求分發(fā)到相應(yīng)的Action類,然后通過ActionForward進(jìn)行鏈接轉(zhuǎn)向。

1.2Spring

Spring是一個(gè)以控制反轉(zhuǎn)(IOC)和面向切面(AOP)編程為核心的輕量級(jí)分層體系結(jié)構(gòu)開發(fā)框架。通過控制反轉(zhuǎn)機(jī)制,只需描述哪一個(gè)組建需要哪一項(xiàng)服務(wù),而無需在代碼中直接與對(duì)象或服務(wù)連接,通過IOC容器自動(dòng)地將其注入。同時(shí)運(yùn)用面向切面編程可以創(chuàng)建“橫切關(guān)注點(diǎn)”,可將它們插入到代碼中,使代碼具有良好的可重用性可擴(kuò)展性。此外,Spring還提供了包括聲明式事務(wù)管理,RMI或WebServices遠(yuǎn)程訪問業(yè)務(wù)邏輯,以及可以多種方法進(jìn)行的持久化數(shù)據(jù)庫的解決方案。

1.3JPA

JPA(JavaPersistenceAPI)由EJB3.0軟件專家組開發(fā),是JavaEE標(biāo)準(zhǔn)中的ORM規(guī)范,它充分吸收了現(xiàn)有Hibernate、TopLink等ORM框架的基礎(chǔ)上發(fā)展而來。JPA是一個(gè)簡(jiǎn)單易用、伸縮性強(qiáng)的ORM規(guī)范。任何符合JPA標(biāo)準(zhǔn)的框架都提供相同的訪問API,這確保了利用JPA技術(shù)開發(fā)的企業(yè)級(jí)應(yīng)用可以在任何實(shí)現(xiàn)了JPA規(guī)范的ORM框架中運(yùn)行,可移植性很強(qiáng)。目前主流的ORM框架如Hibernate也提供了對(duì)JPA的實(shí)現(xiàn)。

2系統(tǒng)設(shè)計(jì)

2.1系統(tǒng)功能模塊設(shè)計(jì)

電子商務(wù)系統(tǒng)是一套面向企業(yè)級(jí)的商品在線交易平臺(tái),從用戶的角度看系統(tǒng)可分為前臺(tái)和后臺(tái)兩大模塊,前臺(tái)主要負(fù)責(zé)用戶的產(chǎn)品瀏覽,在線交易,產(chǎn)品評(píng)價(jià)等商務(wù)活動(dòng)。后臺(tái)模塊又可根據(jù)超級(jí)管理員、普通管理員、部門員工等不同權(quán)限對(duì)網(wǎng)站的運(yùn)營(yíng)實(shí)施管理功能。從功能結(jié)構(gòu)上看,系統(tǒng)可包含多個(gè)功能子模塊,具體如下:產(chǎn)品管理:網(wǎng)站運(yùn)營(yíng)人員可通過該模塊對(duì)產(chǎn)品的詳細(xì)信息進(jìn)行管理。產(chǎn)品具有產(chǎn)品類別、品牌、價(jià)格、銷量、點(diǎn)擊數(shù)、廠商、是否推薦標(biāo)識(shí)等屬性,產(chǎn)品類別具有向下無限級(jí)分類功能。產(chǎn)品搜索:根據(jù)用戶輸入的關(guān)鍵詞對(duì)產(chǎn)品信息進(jìn)行搜索,并可通過產(chǎn)品類別、品牌、價(jià)格等屬性進(jìn)行篩選。產(chǎn)品展示:前臺(tái)展示頁面提品類別和品牌的導(dǎo)航,通過導(dǎo)航可以定位到相應(yīng)類別和品牌下的產(chǎn)品列表;產(chǎn)品頁面顯示產(chǎn)品的詳細(xì)信息,并可根據(jù)產(chǎn)品價(jià)格,產(chǎn)品銷量等屬性對(duì)產(chǎn)品進(jìn)行排序。購(gòu)物車:購(gòu)物車是在線交易系統(tǒng)的重要組成部分,類似于現(xiàn)實(shí)世界超市中的購(gòu)物籃。用戶可以將喜愛的產(chǎn)品添加進(jìn)購(gòu)物車,而后建立訂單結(jié)算,支付方式可通過在線支付(支付寶等)和郵局匯款方式。購(gòu)物車提品添加、產(chǎn)品刪除、產(chǎn)品數(shù)量修改、產(chǎn)品清空、產(chǎn)品總價(jià)格計(jì)算等功能。訂單管理:訂單管理模塊的主要功能包括訂單查詢、訂單修改、訂單刪除、訂單處理等。訂單處理流程由多個(gè)部門協(xié)同參與,市場(chǎng)部負(fù)責(zé)訂單確認(rèn),財(cái)務(wù)部負(fù)責(zé)訂單支付確認(rèn),產(chǎn)品部負(fù)責(zé)產(chǎn)品的配送。訂單根據(jù)處理流程應(yīng)具有多個(gè)處理狀態(tài):未處理、已確認(rèn)、已支付、已配送等。為避免同一訂單同時(shí)被多人進(jìn)行處理造成的訂單異常,訂單在被處理時(shí)其狀態(tài)設(shè)為鎖定,只允許單人訪問,處理完畢后恢復(fù)解鎖。用戶管理:網(wǎng)站的用戶群體可分為前臺(tái)客戶和網(wǎng)站運(yùn)營(yíng)人員,故用戶管理功能可分為對(duì)前臺(tái)客戶信息的管理和網(wǎng)站運(yùn)營(yíng)人員的管理。對(duì)前臺(tái)客戶可管理其注冊(cè)信息、購(gòu)買行為、評(píng)論回復(fù)等;對(duì)網(wǎng)站運(yùn)營(yíng)人員可管理其員工信息和部門信息等。其中,網(wǎng)站運(yùn)營(yíng)人員隸屬于不同的部門之下,每個(gè)部門行使不同的責(zé)任和權(quán)限。權(quán)限管理:權(quán)限管理針對(duì)網(wǎng)站的運(yùn)營(yíng)人員設(shè)定,超級(jí)管理員擁有所有權(quán)限,可創(chuàng)建并維護(hù)下屬的部門信息,為部門添加員工并分配部門相應(yīng)的操作權(quán)限。數(shù)據(jù)統(tǒng)計(jì):對(duì)產(chǎn)品的銷量、點(diǎn)擊數(shù)、訪問來源、個(gè)性化用戶購(gòu)買行為、瀏覽習(xí)慣等數(shù)據(jù)進(jìn)行統(tǒng)計(jì),為網(wǎng)站商業(yè)運(yùn)營(yíng)提供決策支持。

2.2分層架構(gòu)設(shè)計(jì)

基礎(chǔ)平臺(tái)采用JavaEE的三層結(jié)構(gòu),分為表現(xiàn)層、業(yè)務(wù)邏輯層和數(shù)據(jù)服務(wù)層(系統(tǒng)架構(gòu)如圖1所示)。其中表現(xiàn)層主要包括Jsp、Struts標(biāo)簽和JSTL/EL來完成頁面顯示和數(shù)據(jù)的呈現(xiàn)。數(shù)據(jù)服務(wù)層由MySQL提供數(shù)據(jù)存儲(chǔ)服務(wù)。中間層通過整合主流的開源框架Struts+Spring+JPA實(shí)現(xiàn),具體又可細(xì)分為:①Web層,負(fù)責(zé)表現(xiàn)層與業(yè)務(wù)邏輯層的交互,通過調(diào)用業(yè)務(wù)層對(duì)象處理業(yè)務(wù),并進(jìn)行鏈接轉(zhuǎn)向,呈現(xiàn)數(shù)據(jù)到表現(xiàn)層;②Service層,負(fù)責(zé)業(yè)務(wù)邏輯的實(shí)現(xiàn),通過DAO接口的實(shí)例對(duì)象進(jìn)行持久化操作;③DAO層,負(fù)責(zé)與持久化對(duì)象進(jìn)行交互,封裝了基本的數(shù)據(jù)訪問方法,如增、刪、改、查等;④PO層,負(fù)責(zé)對(duì)象到關(guān)系數(shù)據(jù)庫的映射。整合框架的過程中,通過基于MVC模式的Struts框架,利用ActionForm類封裝與用戶交互的數(shù)據(jù)元素,Ac-tion類實(shí)現(xiàn)控制、調(diào)用業(yè)務(wù)對(duì)象處理業(yè)務(wù)。通過Spring容器進(jìn)行業(yè)務(wù)組件的組裝關(guān)聯(lián),通過依賴注入、AOP應(yīng)用、面向接口編程,來降低組件之間的耦合度,提高系統(tǒng)的擴(kuò)展性和通用性。把ActionObject交由Spring容器進(jìn)行管理,在Action中可通過依賴注入功能為Action對(duì)象注入業(yè)務(wù)對(duì)象;使用Spring容器提供的事務(wù)管理功能對(duì)業(yè)務(wù)層對(duì)象聲明事務(wù)管理。通過JPAAPI對(duì)實(shí)體bean進(jìn)行持久化操作。

3系統(tǒng)實(shí)現(xiàn)

3.1泛型機(jī)制

泛型是JavaSE1.5的新特性,在沒有引入泛型的情況下,往往通過對(duì)類型Object的引用來實(shí)現(xiàn)參數(shù)的“任意化”,“任意化”帶來的缺點(diǎn)是要做顯式的強(qiáng)制類型轉(zhuǎn)換,導(dǎo)致常常出現(xiàn)運(yùn)行時(shí)的轉(zhuǎn)型異常。本系統(tǒng)通過引入泛型機(jī)制實(shí)現(xiàn)參數(shù)化類型,所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù),該參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,并且所有的強(qiáng)制轉(zhuǎn)換都是自動(dòng)和隱式的。從而提高代碼的重用率和可讀性。

3.2產(chǎn)品分類實(shí)現(xiàn)

下面以產(chǎn)品分類為例詳細(xì)說明在架構(gòu)中該模塊的具體實(shí)現(xiàn)。產(chǎn)品分類應(yīng)具類別添加、修改、查詢、刪除、向下無限極分類、分頁查看等功能,由于產(chǎn)品類別之間、類別和具體產(chǎn)品之間有諸多層次性關(guān)系,為避免由于刪除產(chǎn)品類別導(dǎo)致的其他數(shù)據(jù)異常,故刪除功能并不對(duì)產(chǎn)品類別的數(shù)據(jù)進(jìn)行物理刪除,而是通過一個(gè)是否可見標(biāo)識(shí)設(shè)定其可見或隱藏。產(chǎn)品分類具有如下屬性:分類ID、類別名稱、是否可見標(biāo)識(shí)、所屬上級(jí)分類、子類別等。

3.2.1持久層實(shí)現(xiàn)

持久層主要包括持久化類和元注解。通過JPA提供注解方式配置實(shí)體的JPA行為,屬性映射可以在持久化類的屬性getter方法上進(jìn)行標(biāo)記。JPA與數(shù)據(jù)庫的連接通過persistence.xml文件進(jìn)行配置,包括連接數(shù)據(jù)庫所用的連接池、用戶名和密碼等信息。部分產(chǎn)品類別的實(shí)體Bean代碼如下:@Entity//指定為JPA實(shí)體publicclassProductTypeimplementsSerializable{privateIntegertypeid;//產(chǎn)品類別idprivateProductTypeparent;//所屬父類privateSet<ProductType>childtypes=newHashSet<ProductType>();//子類別…@Id@GeneratedValue(strategy=GenerationType.AUTO)//注解持久化類的主鍵信息和主鍵的生成策略publicIntegergetTypeid(){returntypeid;}publicvoidsetTypeid(Integertypeid){this.typeid=typeid;}@ManyToOne(cascade=CascadeType.REFRESH)@JoinColumn(name="parentid")//定義外鍵對(duì)應(yīng)關(guān)系和級(jí)聯(lián)publicProductTypegetParent(){returnparent;}publicvoidsetParent(ProductTypeparent){this.parent=parent;}…}

3.2.2業(yè)務(wù)層實(shí)現(xiàn)

(1)DAO層的實(shí)現(xiàn)

DAO層包括一個(gè)接口DAO及其DaoSupport實(shí)現(xiàn)類,通過引入泛型機(jī)制實(shí)現(xiàn)參數(shù)化類型,可對(duì)所有實(shí)體進(jìn)行操作。DAO層作為業(yè)務(wù)邏輯層Service的上層父類,完成和持久層進(jìn)行交互的,不同的業(yè)務(wù)邏輯類可根據(jù)不同需求對(duì)DaoSupport方法進(jìn)行重載。DaoSupport類部分代碼片斷如下:@Transactional//聲明事務(wù)管理publicabstractclassDaoSupport<T>implementsDAO<T>{@PersistenceContextprotectedEntityManagerem;//聲明實(shí)體管理器publicvoiddelete(Serializable...entityids){for(Objectid:entityids){em.remove(em.getRef-erence(this.entityClass,id));}}@Transactional(readOnly=true)//聲明事務(wù)只讀屬性publicTfind(SerializableentityId){returnem.find(this.entityClass,entityId);}}

(2)Service層實(shí)現(xiàn)

業(yè)務(wù)對(duì)象負(fù)責(zé)處理程序的業(yè)務(wù)邏輯,包括一個(gè)接口及其實(shí)現(xiàn)類,需要繼承DaoSupport實(shí)現(xiàn)類并將具體的實(shí)體作為泛型參數(shù)傳入。不同實(shí)體的業(yè)務(wù)類可根據(jù)需求重載或增加新的的方法。代碼片斷如下:@Service@Transactional//聲明該類為業(yè)務(wù)類和聲明事務(wù)管理publicclassProductTypeServiceBeanextendsDao-Support<ProductType>implementsProductTypeService{@Override//重載實(shí)體的刪除方法publicvoiddelete(Serializable...entityids){更改可見標(biāo)識(shí)代碼;}…}

(3)業(yè)務(wù)層的配置

下面就是通過Spring的配置文件將定義好的DAO和Service組裝關(guān)聯(lián)起來。配置文件bean.xml文件代碼片斷如下:<beanid="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactory-Bean"><propertyname="persistenceUnitName"value="shopping"/></bean><beanid="transactionManager"class="org.spri-ngframework.orm.jpa.JpaTransactionManager"><propertyname="entityManagerFactory"ref="entityManagerFactory"/></bean><tx:annotation-driventransaction-manager="trans-actionManager"/><beanid="compass"class="pass.spring.LocalCompassBean"><propertyname="classMappings"><list><value>com.bean.product.ProductInfo</value>…</list></property><propertyname="transactionManager"ref="transactionManager"/></bean>

3.3分頁實(shí)現(xiàn)

在編寫JavaWeb應(yīng)用時(shí),常常需要對(duì)顯示的數(shù)據(jù)進(jìn)行分頁顯示,如果一次性將所有結(jié)果數(shù)據(jù)顯示給用戶,則顯得不夠人性化和美觀。該系統(tǒng)對(duì)分頁功能進(jìn)行封裝,并引入泛型機(jī)制,調(diào)用時(shí)通過include指令包含一個(gè)用于顯示分頁數(shù)據(jù)的獨(dú)立jsp頁面即可完成對(duì)所有實(shí)體的分頁功能。具體做法是:利用泛型定義一個(gè)查詢結(jié)果類QueryResult用于存放查詢得到的分頁數(shù)據(jù),該類包含兩個(gè)屬性List<T>型的結(jié)果記錄集resultlist和long型的查詢結(jié)果的總記錄數(shù)totalrecord以及它們的getter和setter方法;同樣利用泛型定義一個(gè)用于在頁面顯示的頁對(duì)象PageView,其包括總記錄數(shù)、總頁數(shù)、每頁顯示記錄數(shù)、當(dāng)前頁、記錄的開始索引、起始頁碼、結(jié)束頁碼、分頁數(shù)據(jù)等,其中分頁數(shù)據(jù)為L(zhǎng)ist<T>型,通過set方法將QueryResult的分頁數(shù)據(jù)注入,另外總記錄數(shù),總頁數(shù)和記錄的開始索引也需要通過簡(jiǎn)單的公式計(jì)算出來,通過set方法注入,在此不一一列舉。用于顯示分頁數(shù)據(jù)的獨(dú)立jsp頁面fenye.jsp部分調(diào)用如下:<c:forEachitems="${pageView.startindex}"end="${pageView.endindex}"var="p">第${p}頁</c:forEach><c:forEachitems="${pageView.records}"var="entry">${entry.propertyValue}</c:forEach>

第3篇:spring框架范文

關(guān)鍵詞:Spring;非侵入式;松耦合;高可配;面向切面

【分類號(hào)】TP393.07

1 引言

EJB的出現(xiàn)帶來了諸如事務(wù)管理之類的核心中間層概念的標(biāo)準(zhǔn)化,但是在實(shí)踐中并沒有獲得絕對(duì)的成功,因?yàn)殚_發(fā)效率,開發(fā)難度和實(shí)際的性能都令人失望。為了解決企業(yè)級(jí)應(yīng)用開發(fā)的復(fù)雜性,Spring技術(shù)誕生了。Spring是一個(gè)開源框架,是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架。Spring使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能。

2 Spring技術(shù)及特點(diǎn)

2.1 Spring框架

核心Spring容器

容器是Spring框架最核心的部分,它負(fù)責(zé)Spring應(yīng)用中的Bean的創(chuàng)建、配置和管理。所有的Spring模塊都構(gòu)建于核心容器之上。

Spring的AOP模塊

在AOP模塊中,Spring對(duì)面向切面編程提供了豐富的支持。這個(gè)模塊是Spring應(yīng)用系統(tǒng)開發(fā)切面的基礎(chǔ)。與依賴注入一樣,AOP可以幫助應(yīng)用對(duì)象解耦。借助于AOP,可以將遍布應(yīng)用的關(guān)注點(diǎn)從它們所應(yīng)用的對(duì)象中解耦出來。

數(shù)據(jù)訪問與集成

Spring的ORM模塊建立在對(duì)DAO的支持之上,并為某些ORM框架提供了一種構(gòu)建DAO的簡(jiǎn)便方式。Spring對(duì)許多流行的ORM框架進(jìn)行了集成,包括Hibernate、JDO等。

WEB和遠(yuǎn)程調(diào)用

MVC模式已經(jīng)被普遍的接受為一種構(gòu)建Web應(yīng)用的方法,它有助于將用戶界面邏輯與應(yīng)用邏輯分離。Spring集成了多種流行的MVC框架,并且自帶了一個(gè)強(qiáng)大的MVC框架,提升了Web層技術(shù)的松耦合性。

2.2 Spring的主要技術(shù)特點(diǎn)

輕量--從大小與開銷兩方面而言Spring都是輕量的。Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。

面向切面--Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性的開放。

容器--Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,可以配置每個(gè)Bean如何被創(chuàng)建以及它們是如何相互關(guān)聯(lián)的。Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大的并難以使用。

框架--Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。

3 Spring在網(wǎng)絡(luò)管理中的應(yīng)用

3.1 Spring與網(wǎng)絡(luò)管理結(jié)合的優(yōu)勢(shì)

如果將Spring技術(shù)應(yīng)用到網(wǎng)絡(luò)管理領(lǐng)域,則可以使網(wǎng)絡(luò)管理系統(tǒng)同樣具有Spring的諸多優(yōu)勢(shì)。同時(shí),還可以利用已經(jīng)實(shí)現(xiàn)的Spring通用服務(wù)和集成框架,使網(wǎng)絡(luò)管理系統(tǒng)更能適應(yīng)未來發(fā)展的需要。更為重要的是,可以在最大程度上減少網(wǎng)絡(luò)一致化過程所需要完成的工作。

利用Spring技術(shù),能方便地實(shí)現(xiàn)各個(gè)網(wǎng)絡(luò)管理功能模塊之間的相互調(diào)用以及信息傳遞,這樣就可以通過增加新的服務(wù)模塊來實(shí)現(xiàn)新的功能,而不必對(duì)整個(gè)系統(tǒng)進(jìn)行重新編寫和重載,便于網(wǎng)絡(luò)管理系統(tǒng)功能的擴(kuò)充。

3.2 傳統(tǒng)網(wǎng)絡(luò)管理系統(tǒng)存在的問題

傳統(tǒng)的網(wǎng)絡(luò)管理系統(tǒng)管理構(gòu)架曾經(jīng)取得了巨大的成功,極大地推動(dòng)了網(wǎng)絡(luò)的發(fā)展。但是,隨著新一代網(wǎng)絡(luò)的快速進(jìn)步,它的一些缺點(diǎn)也慢慢顯現(xiàn)出來,甚至制約了網(wǎng)絡(luò)管理的進(jìn)一步發(fā)展。主要問題有:

現(xiàn)在的網(wǎng)絡(luò)終端千差萬別,對(duì)于每種不同的設(shè)備、不同的軟件平臺(tái)都要開發(fā)出不同的應(yīng)用程序,代碼的可移植性差、工程量大。

系統(tǒng)的可擴(kuò)展性差。由于歷史原因所致,該架構(gòu)對(duì)于很多異構(gòu)的子系統(tǒng)難以合成一個(gè)綜合的管理系統(tǒng),其本身也面臨著可擴(kuò)展性問題。

3.3 Spring的解決方案

本文在分析傳統(tǒng)網(wǎng)管系統(tǒng)的問題的基礎(chǔ)上,研究了Spring在BS環(huán)境中基于Spring技術(shù)的解決方案,并提出了一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)管理框架,如圖2所示。

Web容器啟動(dòng)后,創(chuàng)建兩個(gè)Spring容器:Spring根容器和Web容器。根容器負(fù)責(zé)業(yè)務(wù)處理,整個(gè)應(yīng)用系統(tǒng)的核心處理單元,Web容器主要負(fù)責(zé)接收用戶請(qǐng)求,并將解析后的參數(shù)等轉(zhuǎn)交根容器進(jìn)行處理,然后將處理結(jié)果通過HTTP響應(yīng)返回給前臺(tái)。

SpringWeb容器寄生于Spring根容器中,是根容器的子容器,可以訪問根容器中所有的資源和服務(wù)。單Spring根容器作為單獨(dú)的業(yè)務(wù)處理單元,不能定位SpringWeb容器的服務(wù),這就將應(yīng)用邏輯和視圖顯示處理隔離開來,降低了不同模塊之間的耦合性,并使得應(yīng)用系統(tǒng)更加容易擴(kuò)展。

使用Spring技術(shù)與網(wǎng)管結(jié)合,使得網(wǎng)絡(luò)管理中拓?fù)涔芾怼⒐收瞎芾?、性能管理、配置管理等模塊之間聯(lián)系更加松耦合,模塊彼此獨(dú)立,更加容易復(fù)用和擴(kuò)展。

4 結(jié)束語

Spring是分層的架構(gòu),開發(fā)者可以選擇自己需要的層而不必關(guān)注不必要的部分。Spring使得對(duì)象管理集中化和簡(jiǎn)單化。Spring致力于簡(jiǎn)化企業(yè)級(jí)Java開發(fā),促進(jìn)代碼松耦合。Spring成功的關(guān)鍵在于依賴注入和AOP。隨著網(wǎng)絡(luò)管理系統(tǒng)的發(fā)展,Spring必將在未來的綜合網(wǎng)絡(luò)管理系統(tǒng)中發(fā)揮越來越大的作用。

參考文獻(xiàn)

第4篇:spring框架范文

關(guān)鍵詞:SSH 框架技術(shù) 事務(wù)處理

中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2012)10-0126-02

1、基于SSH框架技術(shù)開發(fā)WEB項(xiàng)目的思路

SSH是Struts Spring Hibernate三個(gè)框架技術(shù)單詞的縮寫。根據(jù)SSH框架技術(shù)整合后各負(fù)其職,各盡其責(zé)及軟件代碼復(fù)用的原則,應(yīng)采用三層結(jié)構(gòu)形式體現(xiàn)WEB項(xiàng)目開發(fā)流程,這三層依次為:表示層(Web層)、業(yè)務(wù)服務(wù)層(Biz層)、DAO層(數(shù)據(jù)訪問層),這三層之間均采用接口方式進(jìn)行聲明及調(diào)用。分層開發(fā)結(jié)構(gòu)圖如圖1所示。

之所以采用SSH框架整合技術(shù)設(shè)計(jì)并實(shí)現(xiàn)Java WEB應(yīng)用系統(tǒng),主要是因?yàn)檫@種整合后的框架技術(shù)可以實(shí)現(xiàn)具有結(jié)構(gòu)清晰、復(fù)用性好、維護(hù)方便、高穩(wěn)定性和高效率開發(fā)的Web應(yīng)用程序。

其中,表示層(Web層):主要接受用戶請(qǐng)求,以及數(shù)據(jù)的返回,為客戶端提供用戶界面以便進(jìn)行交互。

業(yè)務(wù)服務(wù)層(Biz層):此層主要是表示層和數(shù)據(jù)訪問層之間溝通的橋梁,通過對(duì)數(shù)據(jù)訪問層的操作,并根據(jù)業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實(shí)現(xiàn)來負(fù)責(zé)數(shù)據(jù)的傳遞和處理。

DAO層(數(shù)據(jù)訪問層):有時(shí)候也稱為持久層,其功能主要是負(fù)責(zé)數(shù)據(jù)庫的訪問,實(shí)現(xiàn)了O/R映射,將面向?qū)ο蟮牟僮鬓D(zhuǎn)變?yōu)槊嫦蜿P(guān)系的操作。

實(shí)體類層:用于對(duì)必須存儲(chǔ)的信息和相關(guān)行為建模的類,主要用于三層結(jié)構(gòu)中的數(shù)據(jù)傳遞。

在用SSH框架整合技術(shù)開發(fā)的Java WEB項(xiàng)目整個(gè)流程中,由Struts負(fù)責(zé)項(xiàng)目的顯示用戶界面及處理結(jié)果,Spring負(fù)責(zé)項(xiàng)目中各組件間的組織、管理及依賴注入過程,Hibernate負(fù)責(zé)處理數(shù)據(jù)對(duì)象的O/R映射及持久化。

2、基于SSH框架技術(shù)的某系統(tǒng)功能實(shí)現(xiàn)

SSH框架之間各組件的依賴注入關(guān)系如圖2所示,依次為表示層(xxxxAction)依賴業(yè)務(wù)服務(wù)層(xxxxBiz),業(yè)務(wù)服務(wù)層(xxxxBiz)依賴數(shù)據(jù)訪問層(xxxxDAO),數(shù)據(jù)訪問層(xxxxDAO)依賴SessionFactory,SessionFactory依賴數(shù)據(jù)源(DataSource)。下面以開發(fā)的某系統(tǒng)為例(注:以下代碼中連接數(shù)據(jù)庫為SQL Server2008)。

2.1 Spring框架依賴注入Hibernate框架

在Spring框架的配置文件applicationContext.xml中第一步,進(jìn)行數(shù)據(jù)源配置;

value="jdbc:sqlserver://127.0.0.1:1433;databaseName=訪問的數(shù)據(jù)庫名">

第二步,進(jìn)行SessionFactory配置;

第三步,注入Dao層;

第四步,注入業(yè)務(wù)邏輯層;

2.2 Spring框架組裝Struts框架

第五步,注入表示層(action) ;

在Spring框架的applicationContext.xml中加上如下所示的代碼:

程序的依賴關(guān)系都使用Spring管理起來了,Spring框架在經(jīng)過依賴注入后,會(huì)把Struts和Spring整合到一起。在Struts框架中的Struts-config.xml文件中加入如下所示的注入過程。

path="/fwxx" type="Spring框架提供的類">

第5篇:spring框架范文

關(guān)鍵詞:J2EE;表現(xiàn)層;業(yè)務(wù)邏輯層;持久層;整合框架;Struts;Spring;Hibernate

中圖分類號(hào):TP311.52

伴隨著時(shí)代的發(fā)展進(jìn)步,軟件系統(tǒng)的規(guī)模越來越大且更加復(fù)雜。面對(duì)日益復(fù)雜的軟件系統(tǒng),對(duì)于開發(fā)者而言,正在不斷尋求一種能使Web應(yīng)用系統(tǒng)具有更好的可維護(hù)性和可擴(kuò)展性的框架結(jié)構(gòu),以便實(shí)現(xiàn)應(yīng)用程序的高內(nèi)聚、低耦合及代碼的可重用性。J2EE平臺(tái)的出現(xiàn),使軟件的復(fù)用得以很好的實(shí)現(xiàn),J2EE因此成為當(dāng)前市場(chǎng)上廣泛應(yīng)用的企業(yè)級(jí)應(yīng)用系統(tǒng)開發(fā)技術(shù)。

在當(dāng)前的Web系統(tǒng)開發(fā)中,程序開發(fā)人員對(duì)運(yùn)用Struts、Spring、Hibernate框架的整合十分親睞,這便是現(xiàn)在十分流行的輕量級(jí)J2EE。本文致力于研究分析如何有效整合輕量級(jí)J2EE中的Struts、Spring、Hibernate三個(gè)框架。通過對(duì)三個(gè)框架的有效整合使得系統(tǒng)開發(fā)時(shí)間縮短、避免開發(fā)的重復(fù),同時(shí)系統(tǒng)的維護(hù)性、移植性和擴(kuò)展性大大增強(qiáng),系統(tǒng)開發(fā)成本得以降低。

1 J2EE體系結(jié)構(gòu)

1.1 J2EE平臺(tái)簡(jiǎn)介

J2EE是由Sun公司,目前已經(jīng)成為一個(gè)具有穩(wěn)定性、開放性、高安全性的開放平臺(tái)。J2EE提供了EJB(Eenterprise JavaBeans)組件、JSP(Java Server Pages)、Java ServletsAPI的支持,能夠?yàn)樵贗nternet應(yīng)用中保護(hù)數(shù)據(jù)提供安全模式。

J2EE使用多層的分布式應(yīng)用模型來提高系統(tǒng)的維護(hù)性和擴(kuò)展性,分離業(yè)務(wù)邏輯的實(shí)現(xiàn),當(dāng)系統(tǒng)升級(jí)時(shí)可以避免整個(gè)應(yīng)用程序被重新開發(fā)。

J2EE的體系結(jié)構(gòu)可分為領(lǐng)域?qū)ο髮?、?shù)據(jù)訪問對(duì)象層、業(yè)務(wù)邏輯層、控制器層、表現(xiàn)層,各層的組件之間松耦合在一起。應(yīng)用程序安全機(jī)制得以增強(qiáng),性能得以提高,并且有良好的向?qū)еС执虬?、部署?yīng)用。

1.2 J2EE的優(yōu)勢(shì)特點(diǎn)

J2EE是一組規(guī)范、技術(shù)框架及技術(shù)的集合,用于創(chuàng)建分布式企業(yè)系統(tǒng),具有跨平臺(tái)可移植性、開源代碼庫的可用性、服務(wù)端的大容量調(diào)度基數(shù)且符合大多數(shù)W3C標(biāo)準(zhǔn)。

(1)高效的開發(fā)率。企業(yè)通過使用J2EE架構(gòu),不必過問服務(wù)端任務(wù),可完全交由中間件供應(yīng)商完成,系統(tǒng)開發(fā)人員重點(diǎn)創(chuàng)建商業(yè)邏輯,這樣可以減少系統(tǒng)的開發(fā)時(shí)間,提高系統(tǒng)的開發(fā)效率。

(2)良好的可伸縮性。企業(yè)為了滿足在系統(tǒng)上進(jìn)行商業(yè)活動(dòng)的客戶,必須選擇有良好的可伸縮性的服務(wù)器端。因?yàn)楦鞣N操作系統(tǒng)都可以部署基于J2EE架構(gòu)的應(yīng)用程序,且J2EE供應(yīng)商提供了負(fù)載平衡策略,使得系統(tǒng)中的瓶頸消除了,服務(wù)器可以集成部署,因而應(yīng)用系統(tǒng)實(shí)現(xiàn)了良好的伸縮性,滿足了應(yīng)用程序在未來商業(yè)應(yīng)用中的需求。

(3)支持異構(gòu)環(huán)境。應(yīng)用J2EE體系結(jié)構(gòu)使得在異構(gòu)環(huán)境中的可移植程序可以被開發(fā)部署?;贘2EE的程序被合理的設(shè)計(jì)出后,即可只需要開發(fā)一次便部署到各種平臺(tái)。J2EE也提供現(xiàn)成的可兼容J2EE的第三方組件給客戶,為了節(jié)省制定整個(gè)方案的費(fèi)用,可將J2EE部署到異構(gòu)環(huán)境中。

1.3 J2EE的缺點(diǎn)及解決方案

J2EE體系結(jié)構(gòu)提供了基于組件的多層應(yīng)用體系結(jié)構(gòu),在簡(jiǎn)化了系統(tǒng)的開發(fā)、配置和維護(hù)的同時(shí),也存在著一定的缺陷。在J2EE平臺(tái)中,EJB是企業(yè)級(jí)開發(fā)中經(jīng)常使用的一個(gè)重要組件,它提供了持久化、事務(wù)管理、分布計(jì)算、聲明式事務(wù)支持等,較大程度的簡(jiǎn)化了開發(fā)過程。可是,EJB所帶來的簡(jiǎn)化只是相對(duì)的,EJB存在如下缺點(diǎn):

(1)EJB作為J2EE的標(biāo)準(zhǔn)業(yè)務(wù)組件,需要運(yùn)行在EJB容器中,EJB與EJB容器的緊耦合使其可移植性、可測(cè)試性都很差。EJB容器提供所有企業(yè)級(jí)服務(wù),啟動(dòng)慢,部署復(fù)雜,性能較差。

(2)由于J2EE需要使用EJB組件,必須要用到高端的應(yīng)用服務(wù)器,這就比Servlet更加難以管理。同時(shí),在客戶端層需要服務(wù)定位器和業(yè)務(wù)代表。

(3)在EJB容器之前、會(huì)話接口之后,需要運(yùn)行一些難以管理細(xì)粒度對(duì)象。為了管理這些細(xì)粒度對(duì)象,需要額外的基礎(chǔ)架構(gòu)。

(4)EJB容器中一旦放進(jìn)了業(yè)務(wù)邏輯,就很難停下來。如果有一些業(yè)務(wù)對(duì)象需要完成的任務(wù)是EJB編程模型所禁止的(比如讀取文件、開啟網(wǎng)絡(luò)連接、創(chuàng)建線程等),那就會(huì)出現(xiàn)問題。

大量實(shí)踐證明,傳統(tǒng)的J2EE架構(gòu)常常是無法令人滿意的,應(yīng)用程序過于復(fù)雜,測(cè)試?yán)щy,維護(hù)成本較高。

為解決J2EE所存在的上述缺陷,本文通過應(yīng)用Struts、Spring、Hibernate等輕量級(jí)、使用靈活的框架的整合來替代傳統(tǒng)的EJB框架,這種整合后的框架為輕量級(jí)J2EE。

2 輕量級(jí)J2EE中的三個(gè)框架

相對(duì)于傳統(tǒng)意義上的J2EE體系結(jié)構(gòu),輕量級(jí)J2EE架構(gòu)在應(yīng)用系統(tǒng)開發(fā)過程中簡(jiǎn)化了編碼過程,且提供了更敏捷的響應(yīng),降低了復(fù)雜性,減少了規(guī)則。系統(tǒng)的開發(fā)、部署時(shí)間被縮短。

2.1 Struts框架簡(jiǎn)介

Struts用于建立基于Java的框架和web應(yīng)用程序的開放源碼,它是Apache Jakarta項(xiàng)目的組成部分。Struts擁有自己的控制器,整合了其它的一些技術(shù)去實(shí)現(xiàn)模型層、視圖層和控制器層。在所有的MVC框架中,Struts框架被廣泛使用。其具體實(shí)現(xiàn)如圖1所示。

客戶瀏覽器ActionServletActionStruts-config.xml模型JSP頁面HTTP請(qǐng)求HTTP響應(yīng)直接轉(zhuǎn)發(fā)顯示調(diào)用模型轉(zhuǎn)發(fā)請(qǐng)求。

在上圖中有兩個(gè)類,一是Struts的核心控制器ActionServlet,用來獲取用戶的請(qǐng)求;二是用戶提供的Action,控制器接收來自ActionServlet的請(qǐng)求后,根據(jù)請(qǐng)求調(diào)用模型的業(yè)務(wù)邏輯方法來處理這些請(qǐng)求,最后把結(jié)果返回到JSP頁面。

2.2 Spring框架簡(jiǎn)介

Spring是面向切面(AOP)的容器框架,是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC),它由Rod Johnson開發(fā)。

Spring處在應(yīng)用的業(yè)務(wù)邏輯層,該層又是整體架構(gòu)里最核心的,位于表現(xiàn)層和數(shù)據(jù)持久層之間,調(diào)用數(shù)據(jù)持久層中的數(shù)據(jù)返回給客戶所在的表現(xiàn)層。

相比較于EJB,開發(fā)應(yīng)用程序的一種輕量級(jí)的解決方案由Spring提供,具有多種優(yōu)點(diǎn),比如:支持ORM、代碼少、分層清楚、速度快等。

2.3 Hibernate框架簡(jiǎn)介

Hibernate是Java應(yīng)用程序的ORM(對(duì)象/關(guān)系映射)持久層框架,在JDBC的基礎(chǔ)上進(jìn)行了簡(jiǎn)單的封裝以實(shí)現(xiàn)對(duì)象關(guān)系映射。應(yīng)用程序?qū)ο笥蒆ibernate在數(shù)據(jù)庫中存儲(chǔ)。使用Hibernate使開發(fā)者不必編寫大量的代碼來存儲(chǔ)和檢索對(duì)象。

由于關(guān)系型數(shù)據(jù)庫和面向?qū)ο缶幊陶Z言之間會(huì)出現(xiàn)一些不協(xié)調(diào)的問題,為解決這些問題必須設(shè)定一種規(guī)范,ORM便作為一種解決問題的規(guī)范孕育而生。ORM工具所解決的問題就是對(duì)象與數(shù)據(jù)庫表格之間的數(shù)據(jù)轉(zhuǎn)換。

3 Struts、Spring、Hibernate的整合

一般而言,表現(xiàn)層、業(yè)務(wù)邏輯層、持久層組成了應(yīng)用系統(tǒng)的框架,每個(gè)層次分別對(duì)應(yīng)一個(gè)框架,表現(xiàn)層對(duì)應(yīng)Struts框架,業(yè)務(wù)邏輯層對(duì)應(yīng)Spring框架,持久層對(duì)應(yīng)Hibernate框架,各層以松耦合的方式相互作用,而彼此之間又相互獨(dú)立。應(yīng)用系統(tǒng)采用框架整合進(jìn)行開發(fā),提高了系統(tǒng)靈活性及可維護(hù)性,同時(shí)系統(tǒng)的耦合度也得以降低。

3.1 Struts與Spring整合的實(shí)現(xiàn)

目前針對(duì)Struts與Spring框架的整合方式有三種:

(1)利用Spring的ActionSupport類整合Struts。將Spring框架與Struts動(dòng)作耦合在一起,使用這種整合方式,一旦用其它框架替換Sping框架,則代碼需要重新編寫。同時(shí),因?yàn)镾pring無法控制Struts動(dòng)作,致使Spring AOP的優(yōu)勢(shì)無法體現(xiàn)。

(2)使Struts的RequestProcessor被Spring的DelegatingRequestProcessor覆蓋。這種方式的優(yōu)點(diǎn)是較為簡(jiǎn)便,但是如果應(yīng)用系統(tǒng)已經(jīng)擴(kuò)展了RequestProcessor,DelegatingRequestProcessor就需要手動(dòng)整合,如此便增加了代碼量,會(huì)造成維護(hù)的困難,應(yīng)用程序的靈活性也會(huì)因此而降低。

(3)Struts Action委托給Spring框架,這是一種全權(quán)委托方式,就是將Struts的創(chuàng)建工作全部交付給Spring來進(jìn)行。使用Spring的DelegatingActionProxy來實(shí)現(xiàn)工作。Org.springframework.web.struts.DelegatingActionProxy繼承于org.apache.struts.action.Action,Spring支持的工作由模式來完成。Struts的Action由DelegatingAetionproxy配置成,所有的請(qǐng)求先被Actionservlet截取,再被轉(zhuǎn)發(fā)到對(duì)應(yīng)的Action,Action的實(shí)現(xiàn)類全都是DelegtingActionproxy。DelegatingAetionproxy再將請(qǐng)求轉(zhuǎn)發(fā)給Spring容器的bean。

3.2 Spring與Hibernate整合的實(shí)現(xiàn)

Spring整合Hibernate主要是對(duì)Hibernate的Session進(jìn)行管理,為了方便處理典型的Hibernate的整合問題,Spring提供了很多的Ioc的特性的支持。

SessionFactory的管理由Spring通過ApplicationContext來完成,當(dāng)應(yīng)用程序自動(dòng)加載時(shí),SessionFactory處于ApplicationContext管理的任意一個(gè)bean引用中,因?yàn)镾essionFactory是Session的工廠,所以Hibernate的數(shù)據(jù)庫訪問是在Session的管理下進(jìn)行。SessionFactory與數(shù)據(jù)庫的連接同樣由Spring配置,無須使用單獨(dú)Hibernate應(yīng)用所必需的hibernate.cfg.xml文件。由于應(yīng)用了Spring框架,使得對(duì)Hibernate的操作簡(jiǎn)化了。

4 總結(jié)

本文致力于研究分析整合Struts,Spring和Hibernate三個(gè)框架。對(duì)于眾多的應(yīng)用系統(tǒng)開發(fā)者而言,如何根據(jù)系統(tǒng)開發(fā)的實(shí)際情況,在實(shí)際的開發(fā)過程中,有針對(duì)性的采用這三個(gè)框架進(jìn)行整合,是一個(gè)需要不斷思考的問題。框架的整合并非萬能的,使用整合的方式同樣存在一定的缺陷,如何在實(shí)際應(yīng)用中,突出框架整合的優(yōu)勢(shì),避免存在的缺點(diǎn),也是開發(fā)者們?cè)趯硇枰攸c(diǎn)研究的課題。使用三種框架的整合,主要是為了對(duì)應(yīng)用系統(tǒng)的進(jìn)行優(yōu)化,降低應(yīng)用程序開發(fā)成本,提高開發(fā)效率,獲得更好的可擴(kuò)展性和可維護(hù)性。

參考文獻(xiàn):

[1]王曉楠.MVC的設(shè)計(jì)和實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2004,30(3):41-45.

[2]孫衛(wèi)琴.精通Struts:基于MVC 的Java Web 設(shè)計(jì)與開發(fā)[M].北京:電子工業(yè)出版社,2004.

[3]孫衛(wèi)琴.精通Hibernate:Java 對(duì)象持久化技術(shù)詳解[M].北京:電子工業(yè)出版社,2005.

[4]古全友,王恩波,晉昌勝.AOP技術(shù)在J2EE系統(tǒng)構(gòu)建中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(4):150-152.

[5]李剛.整合Struts+ Hibernate+ Spring應(yīng)用開發(fā)詳解[M].北京:清華大學(xué)出版社,2007.

[6]陳天河.Struts,Hibernate,Spring集成開發(fā)寶典[M].北京:電子工業(yè)出版社,2007.

[7]趙強(qiáng).基于Struts框架的研究生管理系統(tǒng)[J].電腦開發(fā)與應(yīng)用,2009.

第6篇:spring框架范文

【關(guān)鍵詞]J2EE;Struts;Hibernate;Spring

中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1006-0278(2013)05-162-01

一、引言

隨著中國(guó)通信業(yè)的發(fā)展,尤其是面對(duì)通信3G時(shí)代。中國(guó)移動(dòng)的電子設(shè)備和技術(shù)越來越成熟與先進(jìn)??墒窃趯?duì)電子設(shè)備的管理方面卻有著不足,從而導(dǎo)致了資源的過多浪費(fèi)以及信息的混亂。因此對(duì)于電子設(shè)備的管理已經(jīng)越來越成為通信業(yè)公司其重要組成部分,通過對(duì)電子設(shè)備的合理管理,將資源利用最大化,加強(qiáng)公司運(yùn)行效率,將會(huì)在未來成為決定公司走向的重要因素。文章主要論述如何實(shí)現(xiàn)對(duì)電子運(yùn)行設(shè)備的辦公化管理,達(dá)到系統(tǒng)性、統(tǒng)一性、安全性。

二、系統(tǒng)設(shè)計(jì)

(一)總體設(shè)計(jì)

本系統(tǒng)采用基于B/S網(wǎng)絡(luò)結(jié)構(gòu)體系來開發(fā)系統(tǒng),基于J2EE平臺(tái)進(jìn)行開發(fā),前臺(tái)頁面使用jsp語言,并選用經(jīng)典的三層架構(gòu)——MVC模型框架Struts作為開發(fā)架構(gòu),在數(shù)據(jù)持久層方面則使用了Hibernate框架,并加入Spring框架對(duì)系統(tǒng)開發(fā)進(jìn)行統(tǒng)一詳細(xì)管理,數(shù)據(jù)庫采用MYSQL。

系統(tǒng)主要由部門管理、機(jī)房管理、員工管理、權(quán)限管理等四模塊組成。另在此之外還擁有日志管理和字典管理兩個(gè)模塊。每一用戶登錄時(shí),首先查找自身的數(shù)據(jù)庫,并查詢其所擁有的權(quán)限。限制其進(jìn)行非其權(quán)限操作,并通過日志記錄其操作,使信息管理詳細(xì)和準(zhǔn)確。

(二)系統(tǒng)主要實(shí)現(xiàn)的功能

本系統(tǒng)主要是對(duì)部門、機(jī)房進(jìn)行管理,通過對(duì)員工權(quán)限的控制使所屬不同部門的員工對(duì)不同設(shè)備進(jìn)行管理,同時(shí)通過對(duì)機(jī)房的監(jiān)控,能及時(shí)的知道機(jī)房的狀況。當(dāng)出現(xiàn)問題時(shí)也能通過日志和字典迅速的查詢到所負(fù)責(zé)員工。具體實(shí)現(xiàn)目標(biāo)如下:

*實(shí)現(xiàn)對(duì)部門信息進(jìn)行全面管理的功能。

*實(shí)現(xiàn)對(duì)機(jī)房信息進(jìn)行全面管理的功能。

*實(shí)現(xiàn)對(duì)員工信息進(jìn)行全面管理的功能。

*實(shí)現(xiàn)對(duì)員工角色的全面管理的功能。

*實(shí)現(xiàn)對(duì)員工在機(jī)房管理時(shí)的信息進(jìn)行全面管理的功能。

*系統(tǒng)最大限度地實(shí)現(xiàn)了易安裝l生、易維護(hù)性和易操作性。

*系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。

三、數(shù)據(jù)庫設(shè)計(jì)

本系統(tǒng)中采用MYSQL數(shù)據(jù)庫來保持?jǐn)?shù)據(jù)信息,使用Hi-bemate框架來進(jìn)行數(shù)據(jù)庫操作。首先設(shè)計(jì)一個(gè)名為China-mobile的數(shù)據(jù)庫來保持?jǐn)?shù)據(jù),并建立如下信息表:

表dept(部門信息表):用來保存部門詳細(xì)信息

表person(員工信息表):用來保存人員詳細(xì)信息

表room(機(jī)房信息表):用來保存機(jī)房詳細(xì)信息

表module(模塊信息表):用來保存人員權(quán)限所屬模塊詳細(xì)信息

表operate(操作信息表):用來保存人員對(duì)系統(tǒng)操作詳細(xì)信息

表log(日志信息表):用來保存日志詳細(xì)信息

表dictype(字典類型信息表):用來保存字典類型詳細(xì)信息

表dic(字典信息表):用來保存字典詳細(xì)信息

表role(權(quán)限信息表):用來保存權(quán)限詳細(xì)信息

四、關(guān)鍵技術(shù)

(一)J2EE平臺(tái)概述

J2EE是一種利用Java平臺(tái)來簡(jiǎn)化諸多與企業(yè)解決方案的開發(fā)、部署和關(guān)系相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。J2EE技術(shù)的基礎(chǔ)是Java平臺(tái)的標(biāo)準(zhǔn)版,J2EE不僅繼承了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),如方便存儲(chǔ)數(shù)據(jù)庫的JDBC(Java數(shù)據(jù)庫連接)技術(shù),同時(shí)還提供了對(duì)EJB(企業(yè)JavaBean)、JMS(異步消息傳輸)、XML(可擴(kuò)展標(biāo)記語言)等技術(shù)的支持。

(二)輕量級(jí)Web框架

由于J2EE平臺(tái)提供的EJB等技術(shù)所占資源多、技術(shù)難以掌握、內(nèi)部復(fù)雜性大的問題,往往在做J2EE軟件開發(fā)時(shí)候,會(huì)在J2EE平臺(tái)的基礎(chǔ)上加入類似于Spring這樣輕量級(jí)框架來降低開發(fā)和維護(hù)的難度。其中成熟的Struts框架是前端開發(fā)領(lǐng)域的利器,Hibernate則是O/RMapping領(lǐng)域事實(shí)上的標(biāo)準(zhǔn),尤其是它對(duì)EJB3.0的巨大貢獻(xiàn),而Spring則使開發(fā)者和具體的J2EE平臺(tái)處于“松偶合”的狀態(tài),可以把Spring看作是各種Web框架的粘合劑。所以Struts+Spring+Hibemate一起構(gòu)成了輕量級(jí)Web框架。其中Struts為表示層,Spring為業(yè)務(wù)邏輯層,Hibernate為持久化層。

(三)運(yùn)用Spring托管Struts和Hibemate

在Spring的托管下,Struts和Hibernate可以利用Spring的特性(IOC);另外Spring對(duì)Struts和Hibemate的APR進(jìn)行了進(jìn)一步的封裝,使得開發(fā)更加簡(jiǎn)單。

1.Spring和Struts的整合

Spring整合Struts有三種方法。方法1:Action繼承org.springframework.

web.struts.AdionSuppo~,這種技術(shù)很簡(jiǎn)單并且易于理解。但不幸的是它將Struts動(dòng)作與Spring框架耦合在一起。方法2:使用org.springffamework,web.struts.

DelegatingRequestProcessor類來覆蓋Struts的Reques-tProcessor處理程序。此方法的確比第一種方法好,但是依然存在一些問題。如果要使用一個(gè)不同的RequestProcessor,則需要手動(dòng)整合Spring的DelegatingRequestProcessor。添加代碼會(huì)造成維護(hù)的麻煩將來會(huì)降低應(yīng)用程序的靈活性。方法3:將Struts動(dòng)作管理委托給Spring。可以通過在Struts-con-fig.mxl動(dòng)作映射中注冊(cè)一個(gè)來實(shí)現(xiàn)。負(fù)責(zé)在Spring環(huán)境中查找Struts動(dòng)作。由于動(dòng)作在Spnng的控制之下,所以它可以填充動(dòng)作的JavaBean屬性,并為應(yīng)用諸如AOP攔截器之類的特性帶來了可能。在此我們采用第三種方式。

2.Spring和Hibernate的整合

為使開發(fā)者能夠以統(tǒng)一的方式同數(shù)據(jù)庫訪問技術(shù)(如:JDBC、Hibernate等)進(jìn)行交互,可以使用Spring框架提供的DAO抽象。Spring DAO抽象允許開發(fā)者在不同數(shù)據(jù)庫訪問技術(shù)之間進(jìn)行切換。Spring框架依據(jù)資源管理、DAO實(shí)現(xiàn)支持、食物策略,對(duì)O/R Mapping進(jìn)行了集成。

整合的關(guān)鍵在于不直接使用Hibernate API,而是讓Spring管理Hibernate。首先定義實(shí)體類繼承于HibernateDa-oSupport,在此類中通過getHibemateTemplatO獲取Hibernate資源的操作。借助于HibernateTemplate我們可以脫離每次數(shù)據(jù)操作首先獲取Session實(shí)例、啟動(dòng)事務(wù)、提交/回滾事務(wù)以及煩瑣的try/catch/finally等操作。

第7篇:spring框架范文

關(guān)鍵詞:Spring;AOP;Java;框架

中圖分類號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2007)03-10753-01

1 引言

AOP(Aspected Oriented Programming)是一種新興的編程技術(shù),它可以解決OOP和過程化方法不能很好解決的橫切(cross-cutting)關(guān)注點(diǎn)問題,如:事務(wù)、安全、日志等。AOP既可以用于分析設(shè)計(jì)階段,也可以用于編碼實(shí)現(xiàn)階段,真正實(shí)現(xiàn)功能模塊的分離,避免代碼纏繞。Spring是基于J2EE的輕量級(jí)開源開發(fā)框架,其中Spring AOP是整個(gè)Spring框架的核心組件。

2 Spring AOP 介紹

OOP將應(yīng)用程序分解成各個(gè)層次的對(duì)象,而AOP將橫切程序的各種關(guān)注點(diǎn)分離出來,簡(jiǎn)化了大型軟件的設(shè)計(jì) 。方面(Aspect)是用Spring的 Advisor或攔截器實(shí)現(xiàn)的。Spring IoC容器(BeanFactory 和ApplicationContext)并不強(qiáng)制依賴于AOP,如果不需要,可以不用AOP。但使用AOP,可以提供更強(qiáng)的模塊性、可擴(kuò)展性。

Spring AOP是由純Java開發(fā)的,它實(shí)現(xiàn)了AOP聯(lián)盟的接口。不同于AspectJ的實(shí)現(xiàn),Spring AOP 只實(shí)現(xiàn)了方法級(jí)別的連接點(diǎn),已經(jīng)足夠滿足J2EE應(yīng)用。OOP倡導(dǎo)的是基于setter/getter 的方法訪問,而非直接訪問域。為了使控制反轉(zhuǎn)(IoC)很方便的使用企業(yè)級(jí)服務(wù),則需要Spring AOP 的實(shí)現(xiàn)。Spring AOP 在運(yùn)行時(shí)才創(chuàng)建Advice 對(duì)象。

3 Spring AOP 面向方面編程

3.1 創(chuàng)建Advice

AOP 通知包含了方面的邏輯。創(chuàng)建一個(gè)Advice 對(duì)象,就是在編寫實(shí)現(xiàn)橫切的功能。連接點(diǎn)是用方法攔截器實(shí)現(xiàn)的,這意味著你編寫的通知將在方法調(diào)用的不同點(diǎn)織入程序中。由于在調(diào)用一個(gè)方法時(shí)有幾個(gè)不同的時(shí)間點(diǎn),Spring 可以在不同的時(shí)間點(diǎn)將方面織入程序。Spring AOP提供了四種Advice接口:MethodBeforeAdvice 用于在目標(biāo)方法調(diào)用前觸發(fā);AfterReturningAdvice 用于在目標(biāo)方法調(diào)用后觸發(fā);ThrowsAdvice 用于在目標(biāo)方法拋出異常時(shí)觸發(fā);MethodInterceptor 用于在目標(biāo)方法執(zhí)行時(shí)觸發(fā)。如果要實(shí)現(xiàn)相應(yīng)功能,則需要實(shí)現(xiàn)上述對(duì)應(yīng)的接口。例如:實(shí)現(xiàn)Before Advice,需要實(shí)現(xiàn)方法 void before(Method method, Object[] args, Object target)。

3.2 在 Spring 中定義 Pointcut

切入點(diǎn)可以決定特定的類、特定的方法是否匹配特定的標(biāo)準(zhǔn)。如果匹配成功,則通知將應(yīng)用到此方法上。Spring 切入點(diǎn)用很靈活的方式將通知組織進(jìn)類中。Spring 中的切入點(diǎn)框架的核心是Pointcut接口,此接口允許定義織入通知中的類和方法。許多方面是通過一系列的通知和切入點(diǎn)組合來定義的。

在Spring中,一個(gè)advisor就是一個(gè)方面的完整的模塊化表示。Spring提供了PointcutAdvisor接口,把通知和切入點(diǎn)組合成一個(gè)對(duì)象,可以方便的在一個(gè)地方管理切入點(diǎn)和通知。切入點(diǎn)分為兩類:靜態(tài)和動(dòng)態(tài)。靜態(tài)切入點(diǎn)的性能要優(yōu)于動(dòng)態(tài)切入點(diǎn),所以應(yīng)優(yōu)先考慮使用。對(duì)Spring內(nèi)建的靜態(tài)切入點(diǎn)類:StaticMethodMatherPointcut,只需要關(guān)心setMappedName和setMappedNames方法??梢允褂镁唧w的類名,也可以使用通配符。如:設(shè)置mappedName屬性為set* ,則匹配所有以set為前綴的方法。Spring還提供了靜態(tài)類:RegexpMethodPointcut,通過使用正則表達(dá)式來定義你感興趣的方法。

當(dāng)切入點(diǎn)需要運(yùn)行時(shí)參數(shù)來執(zhí)行通知時(shí),需要使用動(dòng)態(tài)切入點(diǎn)。Spring內(nèi)建的動(dòng)態(tài)切入點(diǎn)類是ControlFlowPointcut,此切入點(diǎn)匹配基于當(dāng)前線程的調(diào)用堆棧,在當(dāng)前線程執(zhí)行時(shí)找到特定的類和特定的方法時(shí)才返回true。大多數(shù)的切入點(diǎn)可以靜態(tài)確定,使用動(dòng)態(tài)切入點(diǎn)有很大的性能損耗。為了增加切入點(diǎn)的可重用性,Spring 提供了切入點(diǎn)上的集合操作――交集和合并。

3.3 用ProxyFactoryBean創(chuàng)建AOP

如果定義一個(gè)名字為myfactory的ProxyFactoryBean,引用myfactory的對(duì)象所看到的不是ProxyFactoryBean實(shí)例本身,而是由實(shí)現(xiàn)ProxyFactoryBean的類的 getObject()方法所創(chuàng)建的對(duì)象。這個(gè)方法將創(chuàng)建一個(gè)包裝了目標(biāo)對(duì)象 的AOP(Spring倡導(dǎo)基于接口編程)。使用ProxyFactoryBean或者其他IoC可知的類來創(chuàng)建AOP的最重要的優(yōu)點(diǎn)之一,是IoC可以管理通知和切入點(diǎn)。這是一個(gè)非常的強(qiáng)大的功能,能夠?qū)崿F(xiàn)其他AOP框架很難實(shí)現(xiàn)的特定的方法。例如,一個(gè)通知本身可以引用應(yīng)用對(duì)象(除了目標(biāo)對(duì)象, 它在任何AOP框架中都可以引用應(yīng)用對(duì)象),這完全得益于依賴注入所提供的可插入性。通常,不需要ProxyFactoryBean的全部功能,因?yàn)槲覀兂3V粚?duì)一個(gè)方面感興趣: 例如,事務(wù)管理。僅當(dāng)對(duì)一個(gè)特定的方面感興趣時(shí),可以工廠來創(chuàng)建AOP,如:TransactionProxyFactoryBean。

3.4 自動(dòng)

只有很少類需要被通知時(shí),ProxyFactoryBean 可以很好的工作。當(dāng)有許多類需要通知時(shí),顯式地創(chuàng)建每個(gè)就顯得很繁瑣,Spring提供了自動(dòng)通過容器來創(chuàng)建的功能。Spring提供了兩個(gè)類實(shí)現(xiàn)自動(dòng):BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator。

BeanNameAutoProxyCreator為匹配名字的Bean產(chǎn)生,它可以使用在將一個(gè)或者多個(gè)方面應(yīng)用在命名相似的Bean中。自動(dòng)框架判定將要暴露什么接口,如果目標(biāo)Bean沒有實(shí)現(xiàn)任何接口,就會(huì)動(dòng)態(tài)產(chǎn)生一個(gè)子類。而更強(qiáng)大的自動(dòng)是:DefaultAdvisorAutoProxyCreator,你所需要做的是在BeanFactory中包含它的配置。Bean定義被加載到Spring容器中后,DefaultAdvisorAutoProxyCreator將搜索上下文中的Advisor,最后它將Advisor應(yīng)用到匹配Advisor切入點(diǎn)的Bean中。這個(gè)只對(duì)Advisor起作用,它需要通過Advisor來得到需要通知的Bean。

元數(shù)據(jù)自動(dòng)(MetaData AutoProxy)的配置,依賴于源代碼屬性而不是外部XML配置文件。這可以非常方便的使源代碼和AOP元數(shù)據(jù)組織在同一個(gè)地方。元數(shù)據(jù)自動(dòng)最常用的地方是用來聲明事務(wù)。Spring提供了通過AOP框架來聲明事務(wù),這與EJB使用聲明式事務(wù)的功能是相同的。

4 結(jié)束語

AOP使得大型、復(fù)雜軟件的分析設(shè)計(jì)和實(shí)現(xiàn)變得簡(jiǎn)單,保持功能和代碼分離。AOP不會(huì)取代OOP,而是OOP的擴(kuò)展。AOP技術(shù)并不復(fù)雜,經(jīng)過短時(shí)間的學(xué)習(xí)就可以掌握。AOP技術(shù)已經(jīng)引入C、C++、Java、C#等許多語言中。Spring 因?yàn)橐階OP,比EJB簡(jiǎn)單、可靠、高效,不依賴于容器,更容易集成、測(cè)試和移植。

參考文獻(xiàn):

[1] Rod Johnson. Professional Java Development with the Spring Framework [M],Wiley Publishing,2005.

第8篇:spring框架范文

[關(guān)鍵詞] 企業(yè)信息化 輕量級(jí)框架 Struts Spring Hibernate J2EE

目前軟件系統(tǒng)發(fā)展已經(jīng)相當(dāng)復(fù)雜。大型企業(yè)信息系統(tǒng)的設(shè)計(jì)者越來越注重通過一個(gè)合適的框架完成系統(tǒng)開發(fā)。基于J2EE企業(yè)信息系統(tǒng)的平臺(tái)無關(guān)性、層次性、安全性與可擴(kuò)展性正成為企業(yè)信息化的主要解決方案。因此本文通過集成Struts、Spring和Hibernate來實(shí)現(xiàn)模塊間的解耦,以提高企業(yè)信息系統(tǒng)的擴(kuò)展性、復(fù)用性和可維護(hù)性。

一、J2EE框架技術(shù)

Struts起源于SmallTalk的MVC。即Model、View和Controller。由Controller解耦顯示邏輯與業(yè)務(wù)邏輯,支持實(shí)現(xiàn)松耦合結(jié)構(gòu)。面對(duì)WebWork、Spring MVC、JSF、Tapestry等,Struts設(shè)計(jì)成熟、信息資源豐富、開發(fā)群體廣泛,是目前最常用的表現(xiàn)層MVC。

Spring是一種為解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性的輕量級(jí)應(yīng)用程序框架和容器。集成了J2EE許多最佳與前驅(qū)性實(shí)踐。具有傳統(tǒng)EJB的關(guān)鍵服務(wù)而不依賴于任何組件替代重量級(jí)EJB框架。擴(kuò)展了所集成的組件并提供更高級(jí)功能。Spring完成了實(shí)際開發(fā)所需的單態(tài)模式與工廠模式。核心機(jī)制是DI(Dependency Injection)與IOC(Inversion of Control)。通過DAO和ORM 實(shí)現(xiàn)數(shù)據(jù)訪問的抽象模塊,并支持Hibernate。

Hibernate是低侵入ORM(Object-Relationship Mapping)框架。聯(lián)接了面向?qū)ο蟪绦蛟O(shè)計(jì)語言和關(guān)系型數(shù)據(jù)庫。實(shí)現(xiàn)了對(duì)JDBC的輕量級(jí)封裝。通過J2EE中的JDBC、JTA、JNDI實(shí)現(xiàn)Session、Transaction和數(shù)據(jù)庫連接管理。由HQL以面向?qū)ο蠓绞讲樵兂志没瘜?duì)象。ORM框架還包括OJB、TopLink等。OJB是Apache的子項(xiàng)目,開發(fā)文檔不多,規(guī)范一直不很穩(wěn)定,并未得到廣泛支持。TopLink一旦作為商業(yè)產(chǎn)品使用則要收取費(fèi)用。

二、框架的整合與實(shí)踐

對(duì)于一個(gè)企業(yè)信息系統(tǒng)來說,考慮到雖然系統(tǒng)中各模塊實(shí)現(xiàn)不同,但原理大同小異。因此,本文以開發(fā)的信息子系統(tǒng)為例集成Struts、Hibernate和Spring,并說明系統(tǒng)各層實(shí)現(xiàn)。系統(tǒng)架構(gòu)處理流程如圖所示。表現(xiàn)層通過控制器與業(yè)務(wù)邏輯層交互,業(yè)務(wù)邏輯層同時(shí)處理業(yè)務(wù)規(guī)則與數(shù)據(jù)訪問,再與數(shù)據(jù)持久層交互。

圖 系統(tǒng)的架構(gòu)處理流程

1.Domain Object

根據(jù)系統(tǒng)需求從應(yīng)用中抽取實(shí)體。子系統(tǒng)模型實(shí)體類包括:(1)Publisher:者信息。(2)Information:包括標(biāo)題、內(nèi)容、時(shí)間、圖片路徑、新聞審核與推薦等。(3)Category:信息分類。(4)View:信息說明或補(bǔ)充評(píng)論。用POJO(Plain Old Java Object)作為PO。以Information為例,其中包含Publisher、Category和View類對(duì)象。

<class name="informationpub.model.Information" table="information">

<id name=" informationId " column="informationId" type="Integer">//映射標(biāo)識(shí)

<generator class="increment"/></id>

<property name="informationTitle" column="informationTitle" length="30" type="string" not-null="true"></property>

......

<many-to-one name="category"class="informationpub.model.Category"column= "categoryId" not-null="true"/>

......

2.數(shù)據(jù)持久層

數(shù)據(jù)持久層采用DAO(Data Access Object)設(shè)計(jì)模式。對(duì)底層數(shù)據(jù)庫提供CRUD操作,對(duì)上層業(yè)務(wù)邏輯提供DAO接口。DAO實(shí)現(xiàn)包括三個(gè)部分:(1)在DAO接口中聲明CRUD等方法。(2)實(shí)現(xiàn)DAO接口并擴(kuò)展支持類。(3)產(chǎn)生DAO實(shí)例,實(shí)現(xiàn)業(yè)務(wù)邏輯與持久層的解耦。然后獲得DAO 工廠實(shí)例,產(chǎn)生DAO組件。通過擴(kuò)展HibernateDaoSupport和對(duì)應(yīng)DAO接口完成Hibernate實(shí)現(xiàn)。傳入sessionFactory引用到由HibernateDaoSupport提供的方法中,返回HibernateTemplate實(shí)例完成數(shù)據(jù)庫操作。以Information為例的DAO接口實(shí)現(xiàn)類如下:

public class InformationDAOHibernate implements InformationDAO{

public void saveInformation (Information information) {

getHibernateTemplate().saveOrUpdate(information); //保存一條信息

……}}

Spring作為DAO工廠。

<beanid="sessionFactory"class="org.springframework.orm.hibernat3.LocalSessionFactoryBean">……//列出并加載PO映射文件

<beanid="informationDAO"class="informationpub.dao.InformationDAOHibernate">

// sessionFactory的依賴注入

<property name="sessionFactory" ref="sessionFactory"/></bean>

可見當(dāng)數(shù)據(jù)庫結(jié)構(gòu)改變時(shí),僅影響DAO而并不會(huì)涉及業(yè)務(wù)邏輯層。業(yè)務(wù)邏輯只要專注其自身的實(shí)現(xiàn),而不需要關(guān)注底層數(shù)據(jù)庫訪問,實(shí)現(xiàn)了業(yè)務(wù)邏輯與特定數(shù)據(jù)庫訪問的解耦。

3.業(yè)務(wù)邏輯層

業(yè)務(wù)邏輯層完全依賴DAO組件,只需調(diào)用DAO接口。用Facade封裝多個(gè)DAO組件。依賴由Facade提供的一個(gè)高層接口。業(yè)務(wù)邏輯對(duì)外提供InforPubFacade接口,表示層只要面向該接口編程,實(shí)現(xiàn)了業(yè)務(wù)層與表示層的解耦。由InforPubFacadeImp擴(kuò)展InforPubFacade接口實(shí)現(xiàn)。InforPubFacadeImp類中將各DAO作為成員屬性。

public class InforPubFacadeImp implements InforPubFacade{

private InformationDAO informationDAO;

……//各類的DAO作為成員屬性

public void setInformationDAO(InformationDAO informationDAO) {

this. informationDAO = informationDAO;}

public void saveInformation (Information information) {

InformationDAO.saveInformation (information);

}……

}

4.表示層

表示層包括ActionForm和ActionServlet。ActionForm在視圖和ActionServlet之間傳遞數(shù)據(jù)。由ActionForm 的validate()完成數(shù)據(jù)驗(yàn)證。ActionServlet再根據(jù)接響應(yīng)完成到Action的轉(zhuǎn)發(fā)。再由Action的execute()獲取信息完成業(yè)務(wù)邏輯驗(yàn)證并決定調(diào)用的業(yè)務(wù)邏輯。在Struts中完成Spring容器的加載。不再將ActionServlet攔截的請(qǐng)求轉(zhuǎn)發(fā)到struts-config.xml中的Action,而是轉(zhuǎn)發(fā)到由Spring容器管理的Action。并由Spring的IOC管理Action。通過DelegatingRequestProcessor擴(kuò)展Struts的子請(qǐng)求處理器RequestProcessor,將請(qǐng)求轉(zhuǎn)發(fā)到action-servlet.xml。

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

<set-property property="contextConfigLocation"value="/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml"/></plug-in><beans>

<bean name="/viewInformation"class="informationpub.web.ViewInformationAction" >//對(duì)應(yīng)struts-config.xml中viewInformation 的Action

<property name="viewInformation">// 為Acion依賴注入

<ref bean=" InforPubFacade "/></property> </bean>

……//其他Action及相應(yīng)依賴注入

</beans>

三、結(jié)束語

本文集成Struts、Hibernate和Spring。系統(tǒng)層次清晰,由Spring貫穿整個(gè)系統(tǒng),無縫整合表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)持久層。系統(tǒng)靈活性得到增強(qiáng)。業(yè)務(wù)邏輯只需實(shí)現(xiàn)一次,組件之間以接口方式耦合,實(shí)現(xiàn)了企業(yè)信息系統(tǒng)最大限度的解耦。開發(fā)的系統(tǒng)具有良好的伸縮性與可擴(kuò)展性,從而提高企業(yè)運(yùn)作效率與降低開發(fā)成本,具有一定的現(xiàn)實(shí)意義。

參考文獻(xiàn):

[1] James Goodwill. Jakarta struts[M]. O’REILLY Publishing, 2002.

[2] Ted Husted. Struts in Action: Building Web Applications with leading java framework[M]. Manning Publication Company, 2002.

[3] Matt Raible. Spring Live [M]. SourceBeat, 2004.

[4] Rod Johnson. Expert One on One J2EE Development without EJB[M]. Wiley Publishing,2004.

第9篇:spring框架范文

關(guān)鍵詞:框架 Struts Spring Hibernate

SSH是struts+spring+hibernate的集成框架,是當(dāng)前Web應(yīng)用程序開發(fā)采用比較多的一種開源框架技術(shù)。本文主要對(duì)SSH框架的技術(shù)優(yōu)勢(shì)及各組成部分的特點(diǎn)進(jìn)行分析介紹。

一、SSH框架技術(shù)優(yōu)勢(shì)

SSH框架是基于傳統(tǒng)J2EE框架的新技術(shù),SSH框架繼承了J2EE的分層架構(gòu)模式,二者的不同之處僅在于層與層之間的實(shí)現(xiàn)方法。當(dāng)J2EE框架和SSH架構(gòu)完成相同的運(yùn)算任務(wù)時(shí),SSH框架消耗的系統(tǒng)資源最少。

SSH框架在業(yè)務(wù)對(duì)象的的平臺(tái)專用性上沒有特殊的限定要求,在SSH框架中業(yè)務(wù)邏輯的實(shí)現(xiàn)通過普通的Java對(duì)象即可完成。

SSH組合框架技術(shù)優(yōu)勢(shì)體現(xiàn)在四個(gè)方面:一、分離了Java代碼和HTML代碼,降低了對(duì)開發(fā)人員要求的復(fù)合度。二、是系統(tǒng)的層與層之間的工作相是對(duì)獨(dú)立的,代碼耦合度低。三、即使脫離了Spring環(huán)境的AOP機(jī)制,也不會(huì)妨礙AOP實(shí)現(xiàn)業(yè)務(wù)的功能。四、與SSH配合使用的Hibernate等夸平臺(tái)技術(shù)開源性極強(qiáng),促使了SSH框架的飛速發(fā)展。

SSH的技術(shù)優(yōu)勢(shì)使得采用SSH框架技術(shù)開發(fā)的系統(tǒng)具備了很強(qiáng)的可拓展性、可移植性。同時(shí),采用開源的SSH框架能夠大大簡(jiǎn)化系統(tǒng)開發(fā)的復(fù)雜度,縮短系統(tǒng)開發(fā)時(shí)間。

二、Struts

Struts與SSH框架一樣同樣具有開源性,合理恰當(dāng)?shù)氖褂肧truts技術(shù)可以在一定程度上減少基于MVC模型的Web應(yīng)用系統(tǒng)的開發(fā)時(shí)間,從而有效控制系統(tǒng)開發(fā)成本。事實(shí)上,絕大多數(shù)程序員在在使用Servlets和JSP的可擴(kuò)展的應(yīng)用時(shí)已經(jīng)將Struts框架技術(shù)作為系統(tǒng)開發(fā)的標(biāo)準(zhǔn)。

Struts技術(shù)基于MVC框架,Struts的實(shí)現(xiàn)依賴Servlet和JSP實(shí)現(xiàn)。EJB 和JavaBean兩個(gè)組件是Struts框架業(yè)務(wù)功能實(shí)現(xiàn)的基礎(chǔ)部件;Action和ActionServlet部件是框架實(shí)現(xiàn)控制功能的重要部件;視圖部分則是由若干存在內(nèi)在聯(lián)系的.JSP文件有機(jī)構(gòu)成,來實(shí)現(xiàn)系統(tǒng)功能。其工作原理如圖一所示:

1.使用者通過瀏覽器客戶端發(fā)送HTTP協(xié)議的數(shù)據(jù)請(qǐng)求。

2.HTTP請(qǐng)求到達(dá)服務(wù)器后,經(jīng)過控制器,使用框架結(jié)構(gòu)填充Form Bean。

3.經(jīng)過填充的數(shù)據(jù)請(qǐng)求通過框架中控制器的Action組件進(jìn)行數(shù)據(jù)業(yè)務(wù)處理。

4.經(jīng)過控制器處理過的業(yè)務(wù)數(shù)據(jù)調(diào)用Struts的基礎(chǔ)部件實(shí)現(xiàn)業(yè)務(wù)邏輯。

5.將業(yè)務(wù)邏輯經(jīng)過轉(zhuǎn)換形成JSP業(yè)務(wù)進(jìn)行處理,并將處理結(jié)果反或

6.用戶在客戶端或者瀏覽器上得到HTTP請(qǐng)求的響應(yīng)。

三、Spring

Spring在整個(gè)系統(tǒng)體系中提供兩種控架,一種是面向方面編程(AOP)容器框架,另外一種是輕量級(jí)的反向控制。

Spring的核心部分是輕量級(jí)控制反轉(zhuǎn)(Inversion of Control,IoC)容器。通過外部的配置文件翻過來調(diào)用應(yīng)用程序來替代原有應(yīng)用程序調(diào)用的控制功能是控制反轉(zhuǎn)的基本思想。

在框架中進(jìn)行控制功能的創(chuàng)建工作就實(shí)現(xiàn)了輕量級(jí)控制反轉(zhuǎn),這樣就能使控制功能的編寫其從應(yīng)用程序的編寫中分離出來。在使用組件調(diào)用容器時(shí),那么在框架中的控制功能創(chuàng)建中只需要給出調(diào)用組件所用到的對(duì)象。典型的輕量級(jí)控制反轉(zhuǎn)工作過程如下:首先創(chuàng)建程序中以后所用到的所有對(duì)象,并進(jìn)行對(duì)象屬性設(shè)置,對(duì)相關(guān)的屬性和慣性進(jìn)行連接配置,最后再確定調(diào)用的方法和時(shí)間點(diǎn)即可。

Spring架構(gòu)的反轉(zhuǎn)控制提供了應(yīng)用場(chǎng)景和復(fù)雜程度不同的兩種注入方式:構(gòu)造器注入和Setter依賴注入(Dependency Injection)兩種注入方式。Spring支持在實(shí)際開發(fā)中應(yīng)用的最為廣泛方法注入Setter(Setter Injection)方法,這種方法使用起來更加直觀、方便。

四、 Hibernate

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,關(guān)系數(shù)據(jù)庫中的表間的關(guān)系與對(duì)象間關(guān)系的匹配沒有有效的轉(zhuǎn)換來完成匹配,Hibernate的出現(xiàn)可以很好地完成二者之間的關(guān)系匹配問題。

Hibernate可以將對(duì)象間關(guān)系按照一定的邏輯與數(shù)據(jù)庫中表之間的關(guān)系進(jìn)行高耦合度的匹配,這種轉(zhuǎn)換由Hibernate自動(dòng)進(jìn)行[20]。使用Hibernate可以減少原來面向?qū)ο蟪绦蛟O(shè)計(jì)時(shí)大量的程序與數(shù)據(jù)庫之間SQL的轉(zhuǎn)換,有效提高開發(fā)效率。

Hibernate是Java平臺(tái)上高效的ORM映射框架。由于Hibernate使用了反射和運(yùn)行時(shí)字節(jié)碼生成技術(shù),所以對(duì)于最終用戶而言,Hibernate幾乎是透明地運(yùn)行。

Hibernate的執(zhí)行流程如圖二所示:

1. 通過實(shí)例化Configuration對(duì)象,解析文件,建立對(duì)象與數(shù)據(jù)庫之間的映射關(guān)系。

2. 通過創(chuàng)建Session工廠,運(yùn)用session變量,對(duì)數(shù)據(jù)庫進(jìn)行操作。

3. 通過創(chuàng)建事務(wù)Transation,對(duì)對(duì)象進(jìn)行持久化操作。

4. 提交事務(wù),關(guān)閉打開的會(huì)話,結(jié)束操作。

縱觀整個(gè)開發(fā)過程,Hibernate承接應(yīng)用程序和基礎(chǔ)數(shù)據(jù)庫,通過Hibernate,應(yīng)用程序能夠方便地將對(duì)象注入到數(shù)據(jù)庫中。由執(zhí)行流程可以看出,Hibernate通過配置文件及利用數(shù)據(jù)庫作為支撐持續(xù)不斷地向應(yīng)用程序提供服務(wù)。換個(gè)意思來講,是通過配置文件把普通Java對(duì)象直接映射到關(guān)系數(shù)據(jù)庫中,并直接作為關(guān)系數(shù)據(jù)庫的表存儲(chǔ)起來。

SSH是開源的框架技術(shù),它可以部署在AP ACH E等便宜的服務(wù)器上,可以脫離大型服務(wù)器的約束,從而節(jié)省成本開支。另外,SSH作為一款輕量級(jí)的框架,還能夠與異步JavaScript和XML框架同時(shí)使用,能夠較大程度上降低系統(tǒng)開銷,還能夠較大幅度改善用戶的體,從而大大提高系統(tǒng)的性能。

參考文獻(xiàn):

[1]梁立新.項(xiàng)目實(shí)踐――基于Struts Spring Hibernate的Java應(yīng)用開發(fā)[M]. 電子工業(yè)出版社, 2006: 23~24

[2]陳天河. Struts Hibernate Spring集成開發(fā)寶典[M]. 電子工業(yè)出版社, 2007: 56~58

[3]穆福森,吳觀茂. 基于Struts+Spring+Hibe

rnate Web應(yīng)用開發(fā)框架技術(shù)[J].電腦知識(shí)與技術(shù), 2006(2): 81~82

[4]羅時(shí)飛. 精通Spring2.0[M]. 電子工業(yè)出版社, 2007: 50~57

精選范文推薦