前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的spring框架主題范文,僅供參考,歡迎閱讀并收藏。
關鍵詞 Struts2框架;spring框架;Hibernate框架
中圖分類號:TP3 文獻標識碼:A 文章編號:1671-7597(2013)20-0049-01
1 Struts2、Spring和Hibernate三大框架簡介
框架是JavaEE開發(fā)領域炙手可熱的一個名詞。目前技術領域存在很多種框架技術,能夠有效的解決JavaEE應用開發(fā)中很多通用的問題,其中Struts2、Hibernate以及Spring是目前最主流的、使用最廣泛的開源框架,每個框架專注于解決不同的問題,具有很強的代表性。其中,Struts2框架是一個MVC框架;Hibernate框架是一個ORM框架;而Spring框架是一個綜合性的框架,是一個輕量級的解決方案。這三個框架往往各司其職,在應用中的不同層面發(fā)揮其作用。
2 Struts2框架工作原理
Struts2框架已經盛行多年,然而Struts2與Struts1之間并不是擴展和升級的關系。Struts2是著名框架WebWork的擴展,WebWork是一個很優(yōu)秀的MVC框架,但是由于是一個新興的框架,在一段時間內沒有被廣泛使用。后來,Struts和WebWork社區(qū)決定將二者合并,于是推出了Struts2框架。Struts2框架兼具Struts1和WebWork的優(yōu)點,從而得到了廣泛的使用。
Struts2的工作原理比較復雜:
1)客戶端向服務器端提交請求,容器初始化HttpServletRequest請求對象。
2)請求對象被一系列的Servlet過濾器過濾。Struts2中的過濾器有3種:①ActionContextCleanUp過濾器,是一個可選的過濾器,主要用來集成其他框架;②其他插件的核心過濾器,譬如:SiteMesh插件的過濾器;③FilterDispatcher過濾器,是Struts2 API中提供的過濾器,是必選的過濾器。
3)FilterDispatcher過濾器調用ActionMapper,決定該請求是否需要調用某個Action。
4)如果請求需要調用某個Action,ActionMapper將通知FilterDispatcher過濾器把請求的處理交給ActionProxy來處理。
5)ActionProxy通過Configuration Manager解析框架的配置文件struts.xml,找到需要調用的Action類。
6)ActionProxy將創(chuàng)建一個ActionInvocation實例。
7)ActionInvocation實例使用命令模式回調Action中的execute方法,Action調用業(yè)務邏輯類完成業(yè)務邏輯。在調用Action的前后,將調用該Action涉及的相關攔截器。
8)Action執(zhí)行完畢后,ActionInvocation根據struts.xml中的配置找到對應的返回結果,返回給JSP、FreeMarker等模版文件。
3 Hibernate框架的作用及其對象狀態(tài)
Hibernate是一個ORM(Object-Relational Mapping)框架,主要作用是簡化應用的數據持久層編程,不需要編程人員花大量的時間編寫SQL和JDBC代碼??梢?,Hibernate框架位于應用層和數據庫之間,解決數據持久層編程。Hibernate框架主要包括持久化對象(persistent Object):是Hibernate框架中非常重要的組成部分,簡稱為PO。PO用來映射數據庫中的記錄,可以通過修改PO來修改數據庫記錄;包括Hibernate屬性文件(hibernate.properties):使用Hibernate進行數據持久層編程,相關的數據庫訪問信息需要在Hibernate屬性文件中配置,譬如,數據庫驅動類、連接串、用戶名、密碼等,也可以使用名字為hibernate.cfg.xml的xml文件配置屬性;還包括Hibernate映射文件(XML Mapping):持久化對象映射數據庫中的記錄,其映射關系依靠Hibernate框架的映射文件配置,映射文件是XML文件,往往使用*.hbm.xml形式命名,其中*是持久化對象的類名。
Hibernate框架是一個完整的ORM框架,以對象為基礎,通過操作對象,進一步操作對象關聯(lián)的數據庫記錄。持久化類與數據表對應,持久化的對象則映射數據庫記錄。持久化的對象有三種狀態(tài):瞬時狀態(tài),當通過new操作符實例化了一個對象,而這個對象并沒有被Session對象操作,也就是該對象沒有與一個Session對象關聯(lián)時,那么這個對象就稱為瞬時狀態(tài)對象,瞬時狀態(tài)的對象與普通對象沒有區(qū)別,沒有與數據庫的記錄有映射關系;持久狀態(tài),如果一個對象與某一個Session對象關聯(lián),例如被Session對象剛加載的、剛保存的、剛更新的,那么該對象就稱為持久狀態(tài)對象。持久狀態(tài)的對象與數據庫中一條數據相對應,并擁有持久化標識。當持久狀態(tài)的對象有改變時,當事務提交后,Hibernate會自動檢測到對象的變化,并持久化到數據庫中;脫管狀態(tài),當與持久狀態(tài)對象關聯(lián)的Session關閉后,該對象就變成脫管狀態(tài)。脫管狀態(tài)的對象引用依然有效,可以繼續(xù)使用,當脫管狀態(tài)的對象再一次與某個Session關聯(lián)后,脫管狀態(tài)對象將轉變?yōu)槌志脿顟B(tài),脫管期間進行的修改將被持久化到數據庫中。
4 Spring框架的模塊
企業(yè)級應用開發(fā)總是涉及方方面面,Spring框架是一個輕量級的解決方案,致力于創(chuàng)建“快裝式企業(yè)應用”。Spring框架包括一系列的特性,被組織在七個模塊中,可以把Spring框架看成一個標準的開發(fā)組件。Spring框架被設計成無侵入式的方式,即企業(yè)應用可以根據需要選擇Spring框架中必要的組件,而忽略其他部分,以做到最小范圍依賴的Spring框架。
Spring框架包含了7個模塊,每個模塊對于解決不同的問題。Spring Core模塊:是最核心的模塊,封裝了Spring框架核心包,主要提供了Spring IoC(控制反轉)容器。IoC是Spring框架的基礎,所有其他特性都是基于IoC之上;Spring Context模塊:提供了對Spring中對象的框架式訪問方式,并包括國際化、事件傳播等特性;Spring DAO模塊:提供了JDBC的抽象層,是集成JDBC的封裝包,能夠避免JDBC繁瑣冗長代碼,同時還提供了聲明性事務管理特性;Spring ORM模塊:提供了集成常用ORM框架的封裝包,包括JDO、JPA、Hibernate、iBatis等。使用該模塊可以更為便捷的使用ORM框架,而且還可以同時使用Spring的其他特性,如聲明性事務等;Spring Web模塊:提供了Web開發(fā)的一些基礎特性,如上傳文件等,同時提供了與Web框架集成的封裝包,如集成Struts2框架;Spring AOP模塊:AOP(面向切面編程)是Spring中除了IoC外的另外一個核心概念,該模塊提供了符合AOP聯(lián)盟規(guī)范的AOP實現(xiàn),可以降低應用的耦合性,提高擴展性;Spring MVC模塊:該模塊提供了一個MVC框架。Spring框架包含了一系列的特性,可以根據應用的具體需要來選擇使用部分組件。Spring框架可以在任何類型的應用中使用,譬如:桌面應用、Web應用、C/S應用等。
參考文獻
[1]柯常欽,史毓達.基于SSH框架的Web應用系統(tǒng)開發(fā)研究[J].湖北第二師范學院學報,2010(08):102-105.
[2]符鈺.基于Struts2+Hibernate3+Spring3框架的Web[J].金華職業(yè)技術學院學報,2013(06):61-64.
著名的軟件大師RalphJohnson對框架(Framework)進行了如下的定義:框架是整個系統(tǒng)或系統(tǒng)的一部分的可重用設計,由一組抽象的類及其實例間的相互作用方式組成,框架一般具有即插即用的可重用性、成熟的穩(wěn)定性以及良好的團隊協(xié)作性。JavaEE復雜的多層結構決定了大型的JavaEE項目需要運用框架和設計模式來控制軟件質量。Struts、JPA和Spring是JavaEE開發(fā)的3種輕量級開源項目,它們的出現(xiàn)為開發(fā)人員提供了極大的便利,將開發(fā)人員從簡單而繁瑣的工作中解脫出來,從而去關注業(yè)務邏輯模塊的實現(xiàn),從而降低了開發(fā)周期。同時,也為系統(tǒng)的性能和安全性提供了保證,提高了系統(tǒng)的擴展性和可維護性。
1.1Struts
Struts作為Apache組織的子項目,是一個基于MVC(模型—視圖—控制器)設計模式的開源框架,其擺脫了傳統(tǒng)Web應用開發(fā)模式的束縛,得到了眾多軟件企業(yè)和開發(fā)人員的認可,成為MVC模式Web應用的首選框架。Struts的模型(Model)分為Action和ActionForm兩個對象,由ActionForm封裝交互的數據元素,Action完成業(yè)務處理。視圖(View)由JSP以及Struts標簽庫等組成,視圖負責前端的頁面及數據顯示??刂破?Control-ler)用于管理模型與視圖的交互,控制組件有struts-con-fig.xml和ActionServlet,控制器主要處理發(fā)送到Struts的HTTP請求,把請求分發(fā)到相應的Action類,然后通過ActionForward進行鏈接轉向。
1.2Spring
Spring是一個以控制反轉(IOC)和面向切面(AOP)編程為核心的輕量級分層體系結構開發(fā)框架。通過控制反轉機制,只需描述哪一個組建需要哪一項服務,而無需在代碼中直接與對象或服務連接,通過IOC容器自動地將其注入。同時運用面向切面編程可以創(chuàng)建“橫切關注點”,可將它們插入到代碼中,使代碼具有良好的可重用性可擴展性。此外,Spring還提供了包括聲明式事務管理,RMI或WebServices遠程訪問業(yè)務邏輯,以及可以多種方法進行的持久化數據庫的解決方案。
1.3JPA
JPA(JavaPersistenceAPI)由EJB3.0軟件專家組開發(fā),是JavaEE標準中的ORM規(guī)范,它充分吸收了現(xiàn)有Hibernate、TopLink等ORM框架的基礎上發(fā)展而來。JPA是一個簡單易用、伸縮性強的ORM規(guī)范。任何符合JPA標準的框架都提供相同的訪問API,這確保了利用JPA技術開發(fā)的企業(yè)級應用可以在任何實現(xiàn)了JPA規(guī)范的ORM框架中運行,可移植性很強。目前主流的ORM框架如Hibernate也提供了對JPA的實現(xiàn)。
2系統(tǒng)設計
2.1系統(tǒng)功能模塊設計
電子商務系統(tǒng)是一套面向企業(yè)級的商品在線交易平臺,從用戶的角度看系統(tǒng)可分為前臺和后臺兩大模塊,前臺主要負責用戶的產品瀏覽,在線交易,產品評價等商務活動。后臺模塊又可根據超級管理員、普通管理員、部門員工等不同權限對網站的運營實施管理功能。從功能結構上看,系統(tǒng)可包含多個功能子模塊,具體如下:產品管理:網站運營人員可通過該模塊對產品的詳細信息進行管理。產品具有產品類別、品牌、價格、銷量、點擊數、廠商、是否推薦標識等屬性,產品類別具有向下無限級分類功能。產品搜索:根據用戶輸入的關鍵詞對產品信息進行搜索,并可通過產品類別、品牌、價格等屬性進行篩選。產品展示:前臺展示頁面提品類別和品牌的導航,通過導航可以定位到相應類別和品牌下的產品列表;產品頁面顯示產品的詳細信息,并可根據產品價格,產品銷量等屬性對產品進行排序。購物車:購物車是在線交易系統(tǒng)的重要組成部分,類似于現(xiàn)實世界超市中的購物籃。用戶可以將喜愛的產品添加進購物車,而后建立訂單結算,支付方式可通過在線支付(支付寶等)和郵局匯款方式。購物車提品添加、產品刪除、產品數量修改、產品清空、產品總價格計算等功能。訂單管理:訂單管理模塊的主要功能包括訂單查詢、訂單修改、訂單刪除、訂單處理等。訂單處理流程由多個部門協(xié)同參與,市場部負責訂單確認,財務部負責訂單支付確認,產品部負責產品的配送。訂單根據處理流程應具有多個處理狀態(tài):未處理、已確認、已支付、已配送等。為避免同一訂單同時被多人進行處理造成的訂單異常,訂單在被處理時其狀態(tài)設為鎖定,只允許單人訪問,處理完畢后恢復解鎖。用戶管理:網站的用戶群體可分為前臺客戶和網站運營人員,故用戶管理功能可分為對前臺客戶信息的管理和網站運營人員的管理。對前臺客戶可管理其注冊信息、購買行為、評論回復等;對網站運營人員可管理其員工信息和部門信息等。其中,網站運營人員隸屬于不同的部門之下,每個部門行使不同的責任和權限。權限管理:權限管理針對網站的運營人員設定,超級管理員擁有所有權限,可創(chuàng)建并維護下屬的部門信息,為部門添加員工并分配部門相應的操作權限。數據統(tǒng)計:對產品的銷量、點擊數、訪問來源、個性化用戶購買行為、瀏覽習慣等數據進行統(tǒng)計,為網站商業(yè)運營提供決策支持。
2.2分層架構設計
基礎平臺采用JavaEE的三層結構,分為表現(xiàn)層、業(yè)務邏輯層和數據服務層(系統(tǒng)架構如圖1所示)。其中表現(xiàn)層主要包括Jsp、Struts標簽和JSTL/EL來完成頁面顯示和數據的呈現(xiàn)。數據服務層由MySQL提供數據存儲服務。中間層通過整合主流的開源框架Struts+Spring+JPA實現(xiàn),具體又可細分為:①Web層,負責表現(xiàn)層與業(yè)務邏輯層的交互,通過調用業(yè)務層對象處理業(yè)務,并進行鏈接轉向,呈現(xiàn)數據到表現(xiàn)層;②Service層,負責業(yè)務邏輯的實現(xiàn),通過DAO接口的實例對象進行持久化操作;③DAO層,負責與持久化對象進行交互,封裝了基本的數據訪問方法,如增、刪、改、查等;④PO層,負責對象到關系數據庫的映射。整合框架的過程中,通過基于MVC模式的Struts框架,利用ActionForm類封裝與用戶交互的數據元素,Ac-tion類實現(xiàn)控制、調用業(yè)務對象處理業(yè)務。通過Spring容器進行業(yè)務組件的組裝關聯(lián),通過依賴注入、AOP應用、面向接口編程,來降低組件之間的耦合度,提高系統(tǒng)的擴展性和通用性。把ActionObject交由Spring容器進行管理,在Action中可通過依賴注入功能為Action對象注入業(yè)務對象;使用Spring容器提供的事務管理功能對業(yè)務層對象聲明事務管理。通過JPAAPI對實體bean進行持久化操作。
3系統(tǒng)實現(xiàn)
3.1泛型機制
泛型是JavaSE1.5的新特性,在沒有引入泛型的情況下,往往通過對類型Object的引用來實現(xiàn)參數的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉換,導致常常出現(xiàn)運行時的轉型異常。本系統(tǒng)通過引入泛型機制實現(xiàn)參數化類型,所操作的數據類型被指定為一個參數,該參數類型可以用在類、接口和方法的創(chuàng)建中,并且所有的強制轉換都是自動和隱式的。從而提高代碼的重用率和可讀性。
3.2產品分類實現(xiàn)
下面以產品分類為例詳細說明在架構中該模塊的具體實現(xiàn)。產品分類應具類別添加、修改、查詢、刪除、向下無限極分類、分頁查看等功能,由于產品類別之間、類別和具體產品之間有諸多層次性關系,為避免由于刪除產品類別導致的其他數據異常,故刪除功能并不對產品類別的數據進行物理刪除,而是通過一個是否可見標識設定其可見或隱藏。產品分類具有如下屬性:分類ID、類別名稱、是否可見標識、所屬上級分類、子類別等。
3.2.1持久層實現(xiàn)
持久層主要包括持久化類和元注解。通過JPA提供注解方式配置實體的JPA行為,屬性映射可以在持久化類的屬性getter方法上進行標記。JPA與數據庫的連接通過persistence.xml文件進行配置,包括連接數據庫所用的連接池、用戶名和密碼等信息。部分產品類別的實體Bean代碼如下:@Entity//指定為JPA實體publicclassProductTypeimplementsSerializable{privateIntegertypeid;//產品類別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")//定義外鍵對應關系和級聯(lián)publicProductTypegetParent(){returnparent;}publicvoidsetParent(ProductTypeparent){this.parent=parent;}…}
3.2.2業(yè)務層實現(xiàn)
(1)DAO層的實現(xiàn)
DAO層包括一個接口DAO及其DaoSupport實現(xiàn)類,通過引入泛型機制實現(xiàn)參數化類型,可對所有實體進行操作。DAO層作為業(yè)務邏輯層Service的上層父類,完成和持久層進行交互的,不同的業(yè)務邏輯類可根據不同需求對DaoSupport方法進行重載。DaoSupport類部分代碼片斷如下:@Transactional//聲明事務管理publicabstractclassDaoSupport<T>implementsDAO<T>{@PersistenceContextprotectedEntityManagerem;//聲明實體管理器publicvoiddelete(Serializable...entityids){for(Objectid:entityids){em.remove(em.getRef-erence(this.entityClass,id));}}@Transactional(readOnly=true)//聲明事務只讀屬性publicTfind(SerializableentityId){returnem.find(this.entityClass,entityId);}}
(2)Service層實現(xiàn)
業(yè)務對象負責處理程序的業(yè)務邏輯,包括一個接口及其實現(xiàn)類,需要繼承DaoSupport實現(xiàn)類并將具體的實體作為泛型參數傳入。不同實體的業(yè)務類可根據需求重載或增加新的的方法。代碼片斷如下:@Service@Transactional//聲明該類為業(yè)務類和聲明事務管理publicclassProductTypeServiceBeanextendsDao-Support<ProductType>implementsProductTypeService{@Override//重載實體的刪除方法publicvoiddelete(Serializable...entityids){更改可見標識代碼;}…}
(3)業(yè)務層的配置
下面就是通過Spring的配置文件將定義好的DAO和Service組裝關聯(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分頁實現(xiàn)
在編寫JavaWeb應用時,常常需要對顯示的數據進行分頁顯示,如果一次性將所有結果數據顯示給用戶,則顯得不夠人性化和美觀。該系統(tǒng)對分頁功能進行封裝,并引入泛型機制,調用時通過include指令包含一個用于顯示分頁數據的獨立jsp頁面即可完成對所有實體的分頁功能。具體做法是:利用泛型定義一個查詢結果類QueryResult用于存放查詢得到的分頁數據,該類包含兩個屬性List<T>型的結果記錄集resultlist和long型的查詢結果的總記錄數totalrecord以及它們的getter和setter方法;同樣利用泛型定義一個用于在頁面顯示的頁對象PageView,其包括總記錄數、總頁數、每頁顯示記錄數、當前頁、記錄的開始索引、起始頁碼、結束頁碼、分頁數據等,其中分頁數據為List<T>型,通過set方法將QueryResult的分頁數據注入,另外總記錄數,總頁數和記錄的開始索引也需要通過簡單的公式計算出來,通過set方法注入,在此不一一列舉。用于顯示分頁數據的獨立jsp頁面fenye.jsp部分調用如下:<c:forEachitems="${pageView.startindex}"end="${pageView.endindex}"var="p">第${p}頁</c:forEach><c:forEachitems="${pageView.records}"var="entry">${entry.propertyValue}</c:forEach>
關鍵詞:Spring;非侵入式;松耦合;高可配;面向切面
【分類號】TP393.07
1 引言
EJB的出現(xiàn)帶來了諸如事務管理之類的核心中間層概念的標準化,但是在實踐中并沒有獲得絕對的成功,因為開發(fā)效率,開發(fā)難度和實際的性能都令人失望。為了解決企業(yè)級應用開發(fā)的復雜性,Spring技術誕生了。Spring是一個開源框架,是一個輕量級的控制反轉(IOC)和面向切面(AOP)的容器框架。Spring使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應用功能。
2 Spring技術及特點
2.1 Spring框架
核心Spring容器
容器是Spring框架最核心的部分,它負責Spring應用中的Bean的創(chuàng)建、配置和管理。所有的Spring模塊都構建于核心容器之上。
Spring的AOP模塊
在AOP模塊中,Spring對面向切面編程提供了豐富的支持。這個模塊是Spring應用系統(tǒng)開發(fā)切面的基礎。與依賴注入一樣,AOP可以幫助應用對象解耦。借助于AOP,可以將遍布應用的關注點從它們所應用的對象中解耦出來。
數據訪問與集成
Spring的ORM模塊建立在對DAO的支持之上,并為某些ORM框架提供了一種構建DAO的簡便方式。Spring對許多流行的ORM框架進行了集成,包括Hibernate、JDO等。
WEB和遠程調用
MVC模式已經被普遍的接受為一種構建Web應用的方法,它有助于將用戶界面邏輯與應用邏輯分離。Spring集成了多種流行的MVC框架,并且自帶了一個強大的MVC框架,提升了Web層技術的松耦合性。
2.2 Spring的主要技術特點
輕量--從大小與開銷兩方面而言Spring都是輕量的。Spring應用中的對象不依賴于Spring的特定類。
面向切面--Spring提供了面向切面編程的豐富支持,允許通過分離應用的業(yè)務邏輯與系統(tǒng)級服務進行內聚性的開放。
容器--Spring包含并管理應用對象的配置和生命周期,可以配置每個Bean如何被創(chuàng)建以及它們是如何相互關聯(lián)的。Spring不應該被混同于傳統(tǒng)的重量級的EJB容器,它們經常是龐大的并難以使用。
框架--Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。
3 Spring在網絡管理中的應用
3.1 Spring與網絡管理結合的優(yōu)勢
如果將Spring技術應用到網絡管理領域,則可以使網絡管理系統(tǒng)同樣具有Spring的諸多優(yōu)勢。同時,還可以利用已經實現(xiàn)的Spring通用服務和集成框架,使網絡管理系統(tǒng)更能適應未來發(fā)展的需要。更為重要的是,可以在最大程度上減少網絡一致化過程所需要完成的工作。
利用Spring技術,能方便地實現(xiàn)各個網絡管理功能模塊之間的相互調用以及信息傳遞,這樣就可以通過增加新的服務模塊來實現(xiàn)新的功能,而不必對整個系統(tǒng)進行重新編寫和重載,便于網絡管理系統(tǒng)功能的擴充。
3.2 傳統(tǒng)網絡管理系統(tǒng)存在的問題
傳統(tǒng)的網絡管理系統(tǒng)管理構架曾經取得了巨大的成功,極大地推動了網絡的發(fā)展。但是,隨著新一代網絡的快速進步,它的一些缺點也慢慢顯現(xiàn)出來,甚至制約了網絡管理的進一步發(fā)展。主要問題有:
現(xiàn)在的網絡終端千差萬別,對于每種不同的設備、不同的軟件平臺都要開發(fā)出不同的應用程序,代碼的可移植性差、工程量大。
系統(tǒng)的可擴展性差。由于歷史原因所致,該架構對于很多異構的子系統(tǒng)難以合成一個綜合的管理系統(tǒng),其本身也面臨著可擴展性問題。
3.3 Spring的解決方案
本文在分析傳統(tǒng)網管系統(tǒng)的問題的基礎上,研究了Spring在BS環(huán)境中基于Spring技術的解決方案,并提出了一個簡單的網絡管理框架,如圖2所示。
Web容器啟動后,創(chuàng)建兩個Spring容器:Spring根容器和Web容器。根容器負責業(yè)務處理,整個應用系統(tǒng)的核心處理單元,Web容器主要負責接收用戶請求,并將解析后的參數等轉交根容器進行處理,然后將處理結果通過HTTP響應返回給前臺。
SpringWeb容器寄生于Spring根容器中,是根容器的子容器,可以訪問根容器中所有的資源和服務。單Spring根容器作為單獨的業(yè)務處理單元,不能定位SpringWeb容器的服務,這就將應用邏輯和視圖顯示處理隔離開來,降低了不同模塊之間的耦合性,并使得應用系統(tǒng)更加容易擴展。
使用Spring技術與網管結合,使得網絡管理中拓撲管理、故障管理、性能管理、配置管理等模塊之間聯(lián)系更加松耦合,模塊彼此獨立,更加容易復用和擴展。
4 結束語
Spring是分層的架構,開發(fā)者可以選擇自己需要的層而不必關注不必要的部分。Spring使得對象管理集中化和簡單化。Spring致力于簡化企業(yè)級Java開發(fā),促進代碼松耦合。Spring成功的關鍵在于依賴注入和AOP。隨著網絡管理系統(tǒng)的發(fā)展,Spring必將在未來的綜合網絡管理系統(tǒng)中發(fā)揮越來越大的作用。
參考文獻
關鍵詞:SSH 框架技術 事務處理
中圖分類號:TP393 文獻標識碼:A 文章編號:1007-9416(2012)10-0126-02
1、基于SSH框架技術開發(fā)WEB項目的思路
SSH是Struts Spring Hibernate三個框架技術單詞的縮寫。根據SSH框架技術整合后各負其職,各盡其責及軟件代碼復用的原則,應采用三層結構形式體現(xiàn)WEB項目開發(fā)流程,這三層依次為:表示層(Web層)、業(yè)務服務層(Biz層)、DAO層(數據訪問層),這三層之間均采用接口方式進行聲明及調用。分層開發(fā)結構圖如圖1所示。
之所以采用SSH框架整合技術設計并實現(xiàn)Java WEB應用系統(tǒng),主要是因為這種整合后的框架技術可以實現(xiàn)具有結構清晰、復用性好、維護方便、高穩(wěn)定性和高效率開發(fā)的Web應用程序。
其中,表示層(Web層):主要接受用戶請求,以及數據的返回,為客戶端提供用戶界面以便進行交互。
業(yè)務服務層(Biz層):此層主要是表示層和數據訪問層之間溝通的橋梁,通過對數據訪問層的操作,并根據業(yè)務規(guī)則的制定、業(yè)務流程的實現(xiàn)來負責數據的傳遞和處理。
DAO層(數據訪問層):有時候也稱為持久層,其功能主要是負責數據庫的訪問,實現(xiàn)了O/R映射,將面向對象的操作轉變?yōu)槊嫦蜿P系的操作。
實體類層:用于對必須存儲的信息和相關行為建模的類,主要用于三層結構中的數據傳遞。
在用SSH框架整合技術開發(fā)的Java WEB項目整個流程中,由Struts負責項目的顯示用戶界面及處理結果,Spring負責項目中各組件間的組織、管理及依賴注入過程,Hibernate負責處理數據對象的O/R映射及持久化。
2、基于SSH框架技術的某系統(tǒng)功能實現(xiàn)
SSH框架之間各組件的依賴注入關系如圖2所示,依次為表示層(xxxxAction)依賴業(yè)務服務層(xxxxBiz),業(yè)務服務層(xxxxBiz)依賴數據訪問層(xxxxDAO),數據訪問層(xxxxDAO)依賴SessionFactory,SessionFactory依賴數據源(DataSource)。下面以開發(fā)的某系統(tǒng)為例(注:以下代碼中連接數據庫為SQL Server2008)。
2.1 Spring框架依賴注入Hibernate框架
在Spring框架的配置文件applicationContext.xml中第一步,進行數據源配置;
value="jdbc:sqlserver://127.0.0.1:1433;databaseName=訪問的數據庫名">
第二步,進行SessionFactory配置;
第三步,注入Dao層;
第四步,注入業(yè)務邏輯層;
2.2 Spring框架組裝Struts框架
第五步,注入表示層(action) ;
在Spring框架的applicationContext.xml中加上如下所示的代碼:
程序的依賴關系都使用Spring管理起來了,Spring框架在經過依賴注入后,會把Struts和Spring整合到一起。在Struts框架中的Struts-config.xml文件中加入如下所示的注入過程。
path="/fwxx" type="Spring框架提供的類">
關鍵詞:J2EE;表現(xiàn)層;業(yè)務邏輯層;持久層;整合框架;Struts;Spring;Hibernate
中圖分類號:TP311.52
伴隨著時代的發(fā)展進步,軟件系統(tǒng)的規(guī)模越來越大且更加復雜。面對日益復雜的軟件系統(tǒng),對于開發(fā)者而言,正在不斷尋求一種能使Web應用系統(tǒng)具有更好的可維護性和可擴展性的框架結構,以便實現(xiàn)應用程序的高內聚、低耦合及代碼的可重用性。J2EE平臺的出現(xiàn),使軟件的復用得以很好的實現(xiàn),J2EE因此成為當前市場上廣泛應用的企業(yè)級應用系統(tǒng)開發(fā)技術。
在當前的Web系統(tǒng)開發(fā)中,程序開發(fā)人員對運用Struts、Spring、Hibernate框架的整合十分親睞,這便是現(xiàn)在十分流行的輕量級J2EE。本文致力于研究分析如何有效整合輕量級J2EE中的Struts、Spring、Hibernate三個框架。通過對三個框架的有效整合使得系統(tǒng)開發(fā)時間縮短、避免開發(fā)的重復,同時系統(tǒng)的維護性、移植性和擴展性大大增強,系統(tǒng)開發(fā)成本得以降低。
1 J2EE體系結構
1.1 J2EE平臺簡介
J2EE是由Sun公司,目前已經成為一個具有穩(wěn)定性、開放性、高安全性的開放平臺。J2EE提供了EJB(Eenterprise JavaBeans)組件、JSP(Java Server Pages)、Java ServletsAPI的支持,能夠為在Internet應用中保護數據提供安全模式。
J2EE使用多層的分布式應用模型來提高系統(tǒng)的維護性和擴展性,分離業(yè)務邏輯的實現(xiàn),當系統(tǒng)升級時可以避免整個應用程序被重新開發(fā)。
J2EE的體系結構可分為領域對象層、數據訪問對象層、業(yè)務邏輯層、控制器層、表現(xiàn)層,各層的組件之間松耦合在一起。應用程序安全機制得以增強,性能得以提高,并且有良好的向導支持打包、部署應用。
1.2 J2EE的優(yōu)勢特點
J2EE是一組規(guī)范、技術框架及技術的集合,用于創(chuàng)建分布式企業(yè)系統(tǒng),具有跨平臺可移植性、開源代碼庫的可用性、服務端的大容量調度基數且符合大多數W3C標準。
(1)高效的開發(fā)率。企業(yè)通過使用J2EE架構,不必過問服務端任務,可完全交由中間件供應商完成,系統(tǒng)開發(fā)人員重點創(chuàng)建商業(yè)邏輯,這樣可以減少系統(tǒng)的開發(fā)時間,提高系統(tǒng)的開發(fā)效率。
(2)良好的可伸縮性。企業(yè)為了滿足在系統(tǒng)上進行商業(yè)活動的客戶,必須選擇有良好的可伸縮性的服務器端。因為各種操作系統(tǒng)都可以部署基于J2EE架構的應用程序,且J2EE供應商提供了負載平衡策略,使得系統(tǒng)中的瓶頸消除了,服務器可以集成部署,因而應用系統(tǒng)實現(xiàn)了良好的伸縮性,滿足了應用程序在未來商業(yè)應用中的需求。
(3)支持異構環(huán)境。應用J2EE體系結構使得在異構環(huán)境中的可移植程序可以被開發(fā)部署?;贘2EE的程序被合理的設計出后,即可只需要開發(fā)一次便部署到各種平臺。J2EE也提供現(xiàn)成的可兼容J2EE的第三方組件給客戶,為了節(jié)省制定整個方案的費用,可將J2EE部署到異構環(huán)境中。
1.3 J2EE的缺點及解決方案
J2EE體系結構提供了基于組件的多層應用體系結構,在簡化了系統(tǒng)的開發(fā)、配置和維護的同時,也存在著一定的缺陷。在J2EE平臺中,EJB是企業(yè)級開發(fā)中經常使用的一個重要組件,它提供了持久化、事務管理、分布計算、聲明式事務支持等,較大程度的簡化了開發(fā)過程??墒牵珽JB所帶來的簡化只是相對的,EJB存在如下缺點:
(1)EJB作為J2EE的標準業(yè)務組件,需要運行在EJB容器中,EJB與EJB容器的緊耦合使其可移植性、可測試性都很差。EJB容器提供所有企業(yè)級服務,啟動慢,部署復雜,性能較差。
(2)由于J2EE需要使用EJB組件,必須要用到高端的應用服務器,這就比Servlet更加難以管理。同時,在客戶端層需要服務定位器和業(yè)務代表。
(3)在EJB容器之前、會話接口之后,需要運行一些難以管理細粒度對象。為了管理這些細粒度對象,需要額外的基礎架構。
(4)EJB容器中一旦放進了業(yè)務邏輯,就很難停下來。如果有一些業(yè)務對象需要完成的任務是EJB編程模型所禁止的(比如讀取文件、開啟網絡連接、創(chuàng)建線程等),那就會出現(xiàn)問題。
大量實踐證明,傳統(tǒng)的J2EE架構常常是無法令人滿意的,應用程序過于復雜,測試困難,維護成本較高。
為解決J2EE所存在的上述缺陷,本文通過應用Struts、Spring、Hibernate等輕量級、使用靈活的框架的整合來替代傳統(tǒng)的EJB框架,這種整合后的框架為輕量級J2EE。
2 輕量級J2EE中的三個框架
相對于傳統(tǒng)意義上的J2EE體系結構,輕量級J2EE架構在應用系統(tǒng)開發(fā)過程中簡化了編碼過程,且提供了更敏捷的響應,降低了復雜性,減少了規(guī)則。系統(tǒng)的開發(fā)、部署時間被縮短。
2.1 Struts框架簡介
Struts用于建立基于Java的框架和web應用程序的開放源碼,它是Apache Jakarta項目的組成部分。Struts擁有自己的控制器,整合了其它的一些技術去實現(xiàn)模型層、視圖層和控制器層。在所有的MVC框架中,Struts框架被廣泛使用。其具體實現(xiàn)如圖1所示。
客戶瀏覽器ActionServletActionStruts-config.xml模型JSP頁面HTTP請求HTTP響應直接轉發(fā)顯示調用模型轉發(fā)請求。
在上圖中有兩個類,一是Struts的核心控制器ActionServlet,用來獲取用戶的請求;二是用戶提供的Action,控制器接收來自ActionServlet的請求后,根據請求調用模型的業(yè)務邏輯方法來處理這些請求,最后把結果返回到JSP頁面。
2.2 Spring框架簡介
Spring是面向切面(AOP)的容器框架,是一個輕量級的控制反轉(IoC),它由Rod Johnson開發(fā)。
Spring處在應用的業(yè)務邏輯層,該層又是整體架構里最核心的,位于表現(xiàn)層和數據持久層之間,調用數據持久層中的數據返回給客戶所在的表現(xiàn)層。
相比較于EJB,開發(fā)應用程序的一種輕量級的解決方案由Spring提供,具有多種優(yōu)點,比如:支持ORM、代碼少、分層清楚、速度快等。
2.3 Hibernate框架簡介
Hibernate是Java應用程序的ORM(對象/關系映射)持久層框架,在JDBC的基礎上進行了簡單的封裝以實現(xiàn)對象關系映射。應用程序對象由Hibernate在數據庫中存儲。使用Hibernate使開發(fā)者不必編寫大量的代碼來存儲和檢索對象。
由于關系型數據庫和面向對象編程語言之間會出現(xiàn)一些不協(xié)調的問題,為解決這些問題必須設定一種規(guī)范,ORM便作為一種解決問題的規(guī)范孕育而生。ORM工具所解決的問題就是對象與數據庫表格之間的數據轉換。
3 Struts、Spring、Hibernate的整合
一般而言,表現(xiàn)層、業(yè)務邏輯層、持久層組成了應用系統(tǒng)的框架,每個層次分別對應一個框架,表現(xiàn)層對應Struts框架,業(yè)務邏輯層對應Spring框架,持久層對應Hibernate框架,各層以松耦合的方式相互作用,而彼此之間又相互獨立。應用系統(tǒng)采用框架整合進行開發(fā),提高了系統(tǒng)靈活性及可維護性,同時系統(tǒng)的耦合度也得以降低。
3.1 Struts與Spring整合的實現(xiàn)
目前針對Struts與Spring框架的整合方式有三種:
(1)利用Spring的ActionSupport類整合Struts。將Spring框架與Struts動作耦合在一起,使用這種整合方式,一旦用其它框架替換Sping框架,則代碼需要重新編寫。同時,因為Spring無法控制Struts動作,致使Spring AOP的優(yōu)勢無法體現(xiàn)。
(2)使Struts的RequestProcessor被Spring的DelegatingRequestProcessor覆蓋。這種方式的優(yōu)點是較為簡便,但是如果應用系統(tǒng)已經擴展了RequestProcessor,DelegatingRequestProcessor就需要手動整合,如此便增加了代碼量,會造成維護的困難,應用程序的靈活性也會因此而降低。
(3)Struts Action委托給Spring框架,這是一種全權委托方式,就是將Struts的創(chuàng)建工作全部交付給Spring來進行。使用Spring的DelegatingActionProxy來實現(xiàn)工作。Org.springframework.web.struts.DelegatingActionProxy繼承于org.apache.struts.action.Action,Spring支持的工作由模式來完成。Struts的Action由DelegatingAetionproxy配置成,所有的請求先被Actionservlet截取,再被轉發(fā)到對應的Action,Action的實現(xiàn)類全都是DelegtingActionproxy。DelegatingAetionproxy再將請求轉發(fā)給Spring容器的bean。
3.2 Spring與Hibernate整合的實現(xiàn)
Spring整合Hibernate主要是對Hibernate的Session進行管理,為了方便處理典型的Hibernate的整合問題,Spring提供了很多的Ioc的特性的支持。
SessionFactory的管理由Spring通過ApplicationContext來完成,當應用程序自動加載時,SessionFactory處于ApplicationContext管理的任意一個bean引用中,因為SessionFactory是Session的工廠,所以Hibernate的數據庫訪問是在Session的管理下進行。SessionFactory與數據庫的連接同樣由Spring配置,無須使用單獨Hibernate應用所必需的hibernate.cfg.xml文件。由于應用了Spring框架,使得對Hibernate的操作簡化了。
4 總結
本文致力于研究分析整合Struts,Spring和Hibernate三個框架。對于眾多的應用系統(tǒng)開發(fā)者而言,如何根據系統(tǒng)開發(fā)的實際情況,在實際的開發(fā)過程中,有針對性的采用這三個框架進行整合,是一個需要不斷思考的問題??蚣艿恼喜⒎侨f能的,使用整合的方式同樣存在一定的缺陷,如何在實際應用中,突出框架整合的優(yōu)勢,避免存在的缺點,也是開發(fā)者們在將來需要重點研究的課題。使用三種框架的整合,主要是為了對應用系統(tǒng)的進行優(yōu)化,降低應用程序開發(fā)成本,提高開發(fā)效率,獲得更好的可擴展性和可維護性。
參考文獻:
[1]王曉楠.MVC的設計和實現(xiàn)[J].計算機系統(tǒng)應用,2004,30(3):41-45.
[2]孫衛(wèi)琴.精通Struts:基于MVC 的Java Web 設計與開發(fā)[M].北京:電子工業(yè)出版社,2004.
[3]孫衛(wèi)琴.精通Hibernate:Java 對象持久化技術詳解[M].北京:電子工業(yè)出版社,2005.
[4]古全友,王恩波,晉昌勝.AOP技術在J2EE系統(tǒng)構建中的應用[J].計算機技術與發(fā)展,2006,16(4):150-152.
[5]李剛.整合Struts+ Hibernate+ Spring應用開發(fā)詳解[M].北京:清華大學出版社,2007.
[6]陳天河.Struts,Hibernate,Spring集成開發(fā)寶典[M].北京:電子工業(yè)出版社,2007.
[7]趙強.基于Struts框架的研究生管理系統(tǒng)[J].電腦開發(fā)與應用,2009.
【關鍵詞]J2EE;Struts;Hibernate;Spring
中圖分類號:TP39 文獻標識碼:A 文章編號:1006-0278(2013)05-162-01
一、引言
隨著中國通信業(yè)的發(fā)展,尤其是面對通信3G時代。中國移動的電子設備和技術越來越成熟與先進??墒窃趯﹄娮釉O備的管理方面卻有著不足,從而導致了資源的過多浪費以及信息的混亂。因此對于電子設備的管理已經越來越成為通信業(yè)公司其重要組成部分,通過對電子設備的合理管理,將資源利用最大化,加強公司運行效率,將會在未來成為決定公司走向的重要因素。文章主要論述如何實現(xiàn)對電子運行設備的辦公化管理,達到系統(tǒng)性、統(tǒng)一性、安全性。
二、系統(tǒng)設計
(一)總體設計
本系統(tǒng)采用基于B/S網絡結構體系來開發(fā)系統(tǒng),基于J2EE平臺進行開發(fā),前臺頁面使用jsp語言,并選用經典的三層架構——MVC模型框架Struts作為開發(fā)架構,在數據持久層方面則使用了Hibernate框架,并加入Spring框架對系統(tǒng)開發(fā)進行統(tǒng)一詳細管理,數據庫采用MYSQL。
系統(tǒng)主要由部門管理、機房管理、員工管理、權限管理等四模塊組成。另在此之外還擁有日志管理和字典管理兩個模塊。每一用戶登錄時,首先查找自身的數據庫,并查詢其所擁有的權限。限制其進行非其權限操作,并通過日志記錄其操作,使信息管理詳細和準確。
(二)系統(tǒng)主要實現(xiàn)的功能
本系統(tǒng)主要是對部門、機房進行管理,通過對員工權限的控制使所屬不同部門的員工對不同設備進行管理,同時通過對機房的監(jiān)控,能及時的知道機房的狀況。當出現(xiàn)問題時也能通過日志和字典迅速的查詢到所負責員工。具體實現(xiàn)目標如下:
*實現(xiàn)對部門信息進行全面管理的功能。
*實現(xiàn)對機房信息進行全面管理的功能。
*實現(xiàn)對員工信息進行全面管理的功能。
*實現(xiàn)對員工角色的全面管理的功能。
*實現(xiàn)對員工在機房管理時的信息進行全面管理的功能。
*系統(tǒng)最大限度地實現(xiàn)了易安裝l生、易維護性和易操作性。
*系統(tǒng)運行穩(wěn)定、安全可靠。
三、數據庫設計
本系統(tǒng)中采用MYSQL數據庫來保持數據信息,使用Hi-bemate框架來進行數據庫操作。首先設計一個名為China-mobile的數據庫來保持數據,并建立如下信息表:
表dept(部門信息表):用來保存部門詳細信息
表person(員工信息表):用來保存人員詳細信息
表room(機房信息表):用來保存機房詳細信息
表module(模塊信息表):用來保存人員權限所屬模塊詳細信息
表operate(操作信息表):用來保存人員對系統(tǒng)操作詳細信息
表log(日志信息表):用來保存日志詳細信息
表dictype(字典類型信息表):用來保存字典類型詳細信息
表dic(字典信息表):用來保存字典詳細信息
表role(權限信息表):用來保存權限詳細信息
四、關鍵技術
(一)J2EE平臺概述
J2EE是一種利用Java平臺來簡化諸多與企業(yè)解決方案的開發(fā)、部署和關系相關的復雜問題的體系結構。J2EE技術的基礎是Java平臺的標準版,J2EE不僅繼承了標準版中的許多優(yōu)點,如方便存儲數據庫的JDBC(Java數據庫連接)技術,同時還提供了對EJB(企業(yè)JavaBean)、JMS(異步消息傳輸)、XML(可擴展標記語言)等技術的支持。
(二)輕量級Web框架
由于J2EE平臺提供的EJB等技術所占資源多、技術難以掌握、內部復雜性大的問題,往往在做J2EE軟件開發(fā)時候,會在J2EE平臺的基礎上加入類似于Spring這樣輕量級框架來降低開發(fā)和維護的難度。其中成熟的Struts框架是前端開發(fā)領域的利器,Hibernate則是O/RMapping領域事實上的標準,尤其是它對EJB3.0的巨大貢獻,而Spring則使開發(fā)者和具體的J2EE平臺處于“松偶合”的狀態(tài),可以把Spring看作是各種Web框架的粘合劑。所以Struts+Spring+Hibemate一起構成了輕量級Web框架。其中Struts為表示層,Spring為業(yè)務邏輯層,Hibernate為持久化層。
(三)運用Spring托管Struts和Hibemate
在Spring的托管下,Struts和Hibernate可以利用Spring的特性(IOC);另外Spring對Struts和Hibemate的APR進行了進一步的封裝,使得開發(fā)更加簡單。
1.Spring和Struts的整合
Spring整合Struts有三種方法。方法1:Action繼承org.springframework.
web.struts.AdionSuppo~,這種技術很簡單并且易于理解。但不幸的是它將Struts動作與Spring框架耦合在一起。方法2:使用org.springffamework,web.struts.
DelegatingRequestProcessor類來覆蓋Struts的Reques-tProcessor處理程序。此方法的確比第一種方法好,但是依然存在一些問題。如果要使用一個不同的RequestProcessor,則需要手動整合Spring的DelegatingRequestProcessor。添加代碼會造成維護的麻煩將來會降低應用程序的靈活性。方法3:將Struts動作管理委托給Spring??梢酝ㄟ^在Struts-con-fig.mxl動作映射中注冊一個來實現(xiàn)。負責在Spring環(huán)境中查找Struts動作。由于動作在Spnng的控制之下,所以它可以填充動作的JavaBean屬性,并為應用諸如AOP攔截器之類的特性帶來了可能。在此我們采用第三種方式。
2.Spring和Hibernate的整合
為使開發(fā)者能夠以統(tǒng)一的方式同數據庫訪問技術(如:JDBC、Hibernate等)進行交互,可以使用Spring框架提供的DAO抽象。Spring DAO抽象允許開發(fā)者在不同數據庫訪問技術之間進行切換。Spring框架依據資源管理、DAO實現(xiàn)支持、食物策略,對O/R Mapping進行了集成。
整合的關鍵在于不直接使用Hibernate API,而是讓Spring管理Hibernate。首先定義實體類繼承于HibernateDa-oSupport,在此類中通過getHibemateTemplatO獲取Hibernate資源的操作。借助于HibernateTemplate我們可以脫離每次數據操作首先獲取Session實例、啟動事務、提交/回滾事務以及煩瑣的try/catch/finally等操作。
關鍵詞:Spring;AOP;Java;框架
中圖分類號:TP312文獻標識碼:A文章編號:1009-3044(2007)03-10753-01
1 引言
AOP(Aspected Oriented Programming)是一種新興的編程技術,它可以解決OOP和過程化方法不能很好解決的橫切(cross-cutting)關注點問題,如:事務、安全、日志等。AOP既可以用于分析設計階段,也可以用于編碼實現(xiàn)階段,真正實現(xiàn)功能模塊的分離,避免代碼纏繞。Spring是基于J2EE的輕量級開源開發(fā)框架,其中Spring AOP是整個Spring框架的核心組件。
2 Spring AOP 介紹
OOP將應用程序分解成各個層次的對象,而AOP將橫切程序的各種關注點分離出來,簡化了大型軟件的設計 。方面(Aspect)是用Spring的 Advisor或攔截器實現(xiàn)的。Spring IoC容器(BeanFactory 和ApplicationContext)并不強制依賴于AOP,如果不需要,可以不用AOP。但使用AOP,可以提供更強的模塊性、可擴展性。
Spring AOP是由純Java開發(fā)的,它實現(xiàn)了AOP聯(lián)盟的接口。不同于AspectJ的實現(xiàn),Spring AOP 只實現(xiàn)了方法級別的連接點,已經足夠滿足J2EE應用。OOP倡導的是基于setter/getter 的方法訪問,而非直接訪問域。為了使控制反轉(IoC)很方便的使用企業(yè)級服務,則需要Spring AOP 的實現(xiàn)。Spring AOP 在運行時才創(chuàng)建Advice 對象。
3 Spring AOP 面向方面編程
3.1 創(chuàng)建Advice
AOP 通知包含了方面的邏輯。創(chuàng)建一個Advice 對象,就是在編寫實現(xiàn)橫切的功能。連接點是用方法攔截器實現(xiàn)的,這意味著你編寫的通知將在方法調用的不同點織入程序中。由于在調用一個方法時有幾個不同的時間點,Spring 可以在不同的時間點將方面織入程序。Spring AOP提供了四種Advice接口:MethodBeforeAdvice 用于在目標方法調用前觸發(fā);AfterReturningAdvice 用于在目標方法調用后觸發(fā);ThrowsAdvice 用于在目標方法拋出異常時觸發(fā);MethodInterceptor 用于在目標方法執(zhí)行時觸發(fā)。如果要實現(xiàn)相應功能,則需要實現(xiàn)上述對應的接口。例如:實現(xiàn)Before Advice,需要實現(xiàn)方法 void before(Method method, Object[] args, Object target)。
3.2 在 Spring 中定義 Pointcut
切入點可以決定特定的類、特定的方法是否匹配特定的標準。如果匹配成功,則通知將應用到此方法上。Spring 切入點用很靈活的方式將通知組織進類中。Spring 中的切入點框架的核心是Pointcut接口,此接口允許定義織入通知中的類和方法。許多方面是通過一系列的通知和切入點組合來定義的。
在Spring中,一個advisor就是一個方面的完整的模塊化表示。Spring提供了PointcutAdvisor接口,把通知和切入點組合成一個對象,可以方便的在一個地方管理切入點和通知。切入點分為兩類:靜態(tài)和動態(tài)。靜態(tài)切入點的性能要優(yōu)于動態(tài)切入點,所以應優(yōu)先考慮使用。對Spring內建的靜態(tài)切入點類:StaticMethodMatherPointcut,只需要關心setMappedName和setMappedNames方法??梢允褂镁唧w的類名,也可以使用通配符。如:設置mappedName屬性為set* ,則匹配所有以set為前綴的方法。Spring還提供了靜態(tài)類:RegexpMethodPointcut,通過使用正則表達式來定義你感興趣的方法。
當切入點需要運行時參數來執(zhí)行通知時,需要使用動態(tài)切入點。Spring內建的動態(tài)切入點類是ControlFlowPointcut,此切入點匹配基于當前線程的調用堆棧,在當前線程執(zhí)行時找到特定的類和特定的方法時才返回true。大多數的切入點可以靜態(tài)確定,使用動態(tài)切入點有很大的性能損耗。為了增加切入點的可重用性,Spring 提供了切入點上的集合操作――交集和合并。
3.3 用ProxyFactoryBean創(chuàng)建AOP
如果定義一個名字為myfactory的ProxyFactoryBean,引用myfactory的對象所看到的不是ProxyFactoryBean實例本身,而是由實現(xiàn)ProxyFactoryBean的類的 getObject()方法所創(chuàng)建的對象。這個方法將創(chuàng)建一個包裝了目標對象 的AOP(Spring倡導基于接口編程)。使用ProxyFactoryBean或者其他IoC可知的類來創(chuàng)建AOP的最重要的優(yōu)點之一,是IoC可以管理通知和切入點。這是一個非常的強大的功能,能夠實現(xiàn)其他AOP框架很難實現(xiàn)的特定的方法。例如,一個通知本身可以引用應用對象(除了目標對象, 它在任何AOP框架中都可以引用應用對象),這完全得益于依賴注入所提供的可插入性。通常,不需要ProxyFactoryBean的全部功能,因為我們常常只對一個方面感興趣: 例如,事務管理。僅當對一個特定的方面感興趣時,可以工廠來創(chuàng)建AOP,如:TransactionProxyFactoryBean。
3.4 自動
只有很少類需要被通知時,ProxyFactoryBean 可以很好的工作。當有許多類需要通知時,顯式地創(chuàng)建每個就顯得很繁瑣,Spring提供了自動通過容器來創(chuàng)建的功能。Spring提供了兩個類實現(xiàn)自動:BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator。
BeanNameAutoProxyCreator為匹配名字的Bean產生,它可以使用在將一個或者多個方面應用在命名相似的Bean中。自動框架判定將要暴露什么接口,如果目標Bean沒有實現(xiàn)任何接口,就會動態(tài)產生一個子類。而更強大的自動是:DefaultAdvisorAutoProxyCreator,你所需要做的是在BeanFactory中包含它的配置。Bean定義被加載到Spring容器中后,DefaultAdvisorAutoProxyCreator將搜索上下文中的Advisor,最后它將Advisor應用到匹配Advisor切入點的Bean中。這個只對Advisor起作用,它需要通過Advisor來得到需要通知的Bean。
元數據自動(MetaData AutoProxy)的配置,依賴于源代碼屬性而不是外部XML配置文件。這可以非常方便的使源代碼和AOP元數據組織在同一個地方。元數據自動最常用的地方是用來聲明事務。Spring提供了通過AOP框架來聲明事務,這與EJB使用聲明式事務的功能是相同的。
4 結束語
AOP使得大型、復雜軟件的分析設計和實現(xiàn)變得簡單,保持功能和代碼分離。AOP不會取代OOP,而是OOP的擴展。AOP技術并不復雜,經過短時間的學習就可以掌握。AOP技術已經引入C、C++、Java、C#等許多語言中。Spring 因為引入AOP,比EJB簡單、可靠、高效,不依賴于容器,更容易集成、測試和移植。
參考文獻:
[1] Rod Johnson. Professional Java Development with the Spring Framework [M],Wiley Publishing,2005.
[關鍵詞] 企業(yè)信息化 輕量級框架 Struts Spring Hibernate J2EE
目前軟件系統(tǒng)發(fā)展已經相當復雜。大型企業(yè)信息系統(tǒng)的設計者越來越注重通過一個合適的框架完成系統(tǒng)開發(fā)?;贘2EE企業(yè)信息系統(tǒng)的平臺無關性、層次性、安全性與可擴展性正成為企業(yè)信息化的主要解決方案。因此本文通過集成Struts、Spring和Hibernate來實現(xiàn)模塊間的解耦,以提高企業(yè)信息系統(tǒng)的擴展性、復用性和可維護性。
一、J2EE框架技術
Struts起源于SmallTalk的MVC。即Model、View和Controller。由Controller解耦顯示邏輯與業(yè)務邏輯,支持實現(xiàn)松耦合結構。面對WebWork、Spring MVC、JSF、Tapestry等,Struts設計成熟、信息資源豐富、開發(fā)群體廣泛,是目前最常用的表現(xiàn)層MVC。
Spring是一種為解決企業(yè)應用程序開發(fā)復雜性的輕量級應用程序框架和容器。集成了J2EE許多最佳與前驅性實踐。具有傳統(tǒng)EJB的關鍵服務而不依賴于任何組件替代重量級EJB框架。擴展了所集成的組件并提供更高級功能。Spring完成了實際開發(fā)所需的單態(tài)模式與工廠模式。核心機制是DI(Dependency Injection)與IOC(Inversion of Control)。通過DAO和ORM 實現(xiàn)數據訪問的抽象模塊,并支持Hibernate。
Hibernate是低侵入ORM(Object-Relationship Mapping)框架。聯(lián)接了面向對象程序設計語言和關系型數據庫。實現(xiàn)了對JDBC的輕量級封裝。通過J2EE中的JDBC、JTA、JNDI實現(xiàn)Session、Transaction和數據庫連接管理。由HQL以面向對象方式查詢持久化對象。ORM框架還包括OJB、TopLink等。OJB是Apache的子項目,開發(fā)文檔不多,規(guī)范一直不很穩(wěn)定,并未得到廣泛支持。TopLink一旦作為商業(yè)產品使用則要收取費用。
二、框架的整合與實踐
對于一個企業(yè)信息系統(tǒng)來說,考慮到雖然系統(tǒng)中各模塊實現(xiàn)不同,但原理大同小異。因此,本文以開發(fā)的信息子系統(tǒng)為例集成Struts、Hibernate和Spring,并說明系統(tǒng)各層實現(xiàn)。系統(tǒng)架構處理流程如圖所示。表現(xiàn)層通過控制器與業(yè)務邏輯層交互,業(yè)務邏輯層同時處理業(yè)務規(guī)則與數據訪問,再與數據持久層交互。
圖 系統(tǒng)的架構處理流程
1.Domain Object
根據系統(tǒng)需求從應用中抽取實體。子系統(tǒng)模型實體類包括:(1)Publisher:者信息。(2)Information:包括標題、內容、時間、圖片路徑、新聞審核與推薦等。(3)Category:信息分類。(4)View:信息說明或補充評論。用POJO(Plain Old Java Object)作為PO。以Information為例,其中包含Publisher、Category和View類對象。
<class name="informationpub.model.Information" table="information">
<id name=" informationId " column="informationId" type="Integer">//映射標識
<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.數據持久層
數據持久層采用DAO(Data Access Object)設計模式。對底層數據庫提供CRUD操作,對上層業(yè)務邏輯提供DAO接口。DAO實現(xiàn)包括三個部分:(1)在DAO接口中聲明CRUD等方法。(2)實現(xiàn)DAO接口并擴展支持類。(3)產生DAO實例,實現(xiàn)業(yè)務邏輯與持久層的解耦。然后獲得DAO 工廠實例,產生DAO組件。通過擴展HibernateDaoSupport和對應DAO接口完成Hibernate實現(xiàn)。傳入sessionFactory引用到由HibernateDaoSupport提供的方法中,返回HibernateTemplate實例完成數據庫操作。以Information為例的DAO接口實現(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>
可見當數據庫結構改變時,僅影響DAO而并不會涉及業(yè)務邏輯層。業(yè)務邏輯只要專注其自身的實現(xiàn),而不需要關注底層數據庫訪問,實現(xiàn)了業(yè)務邏輯與特定數據庫訪問的解耦。
3.業(yè)務邏輯層
業(yè)務邏輯層完全依賴DAO組件,只需調用DAO接口。用Facade封裝多個DAO組件。依賴由Facade提供的一個高層接口。業(yè)務邏輯對外提供InforPubFacade接口,表示層只要面向該接口編程,實現(xiàn)了業(yè)務層與表示層的解耦。由InforPubFacadeImp擴展InforPubFacade接口實現(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之間傳遞數據。由ActionForm 的validate()完成數據驗證。ActionServlet再根據接響應完成到Action的轉發(fā)。再由Action的execute()獲取信息完成業(yè)務邏輯驗證并決定調用的業(yè)務邏輯。在Struts中完成Spring容器的加載。不再將ActionServlet攔截的請求轉發(fā)到struts-config.xml中的Action,而是轉發(fā)到由Spring容器管理的Action。并由Spring的IOC管理Action。通過DelegatingRequestProcessor擴展Struts的子請求處理器RequestProcessor,將請求轉發(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" >//對應struts-config.xml中viewInformation 的Action
<property name="viewInformation">// 為Acion依賴注入
<ref bean=" InforPubFacade "/></property> </bean>
……//其他Action及相應依賴注入
</beans>
三、結束語
本文集成Struts、Hibernate和Spring。系統(tǒng)層次清晰,由Spring貫穿整個系統(tǒng),無縫整合表示層、業(yè)務邏輯層和數據持久層。系統(tǒng)靈活性得到增強。業(yè)務邏輯只需實現(xiàn)一次,組件之間以接口方式耦合,實現(xiàn)了企業(yè)信息系統(tǒng)最大限度的解耦。開發(fā)的系統(tǒng)具有良好的伸縮性與可擴展性,從而提高企業(yè)運作效率與降低開發(fā)成本,具有一定的現(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.
關鍵詞:框架 Struts Spring Hibernate
SSH是struts+spring+hibernate的集成框架,是當前Web應用程序開發(fā)采用比較多的一種開源框架技術。本文主要對SSH框架的技術優(yōu)勢及各組成部分的特點進行分析介紹。
一、SSH框架技術優(yōu)勢
SSH框架是基于傳統(tǒng)J2EE框架的新技術,SSH框架繼承了J2EE的分層架構模式,二者的不同之處僅在于層與層之間的實現(xiàn)方法。當J2EE框架和SSH架構完成相同的運算任務時,SSH框架消耗的系統(tǒng)資源最少。
SSH框架在業(yè)務對象的的平臺專用性上沒有特殊的限定要求,在SSH框架中業(yè)務邏輯的實現(xiàn)通過普通的Java對象即可完成。
SSH組合框架技術優(yōu)勢體現(xiàn)在四個方面:一、分離了Java代碼和HTML代碼,降低了對開發(fā)人員要求的復合度。二、是系統(tǒng)的層與層之間的工作相是對獨立的,代碼耦合度低。三、即使脫離了Spring環(huán)境的AOP機制,也不會妨礙AOP實現(xiàn)業(yè)務的功能。四、與SSH配合使用的Hibernate等夸平臺技術開源性極強,促使了SSH框架的飛速發(fā)展。
SSH的技術優(yōu)勢使得采用SSH框架技術開發(fā)的系統(tǒng)具備了很強的可拓展性、可移植性。同時,采用開源的SSH框架能夠大大簡化系統(tǒng)開發(fā)的復雜度,縮短系統(tǒng)開發(fā)時間。
二、Struts
Struts與SSH框架一樣同樣具有開源性,合理恰當的使用Struts技術可以在一定程度上減少基于MVC模型的Web應用系統(tǒng)的開發(fā)時間,從而有效控制系統(tǒng)開發(fā)成本。事實上,絕大多數程序員在在使用Servlets和JSP的可擴展的應用時已經將Struts框架技術作為系統(tǒng)開發(fā)的標準。
Struts技術基于MVC框架,Struts的實現(xiàn)依賴Servlet和JSP實現(xiàn)。EJB 和JavaBean兩個組件是Struts框架業(yè)務功能實現(xiàn)的基礎部件;Action和ActionServlet部件是框架實現(xiàn)控制功能的重要部件;視圖部分則是由若干存在內在聯(lián)系的.JSP文件有機構成,來實現(xiàn)系統(tǒng)功能。其工作原理如圖一所示:
1.使用者通過瀏覽器客戶端發(fā)送HTTP協(xié)議的數據請求。
2.HTTP請求到達服務器后,經過控制器,使用框架結構填充Form Bean。
3.經過填充的數據請求通過框架中控制器的Action組件進行數據業(yè)務處理。
4.經過控制器處理過的業(yè)務數據調用Struts的基礎部件實現(xiàn)業(yè)務邏輯。
5.將業(yè)務邏輯經過轉換形成JSP業(yè)務進行處理,并將處理結果反或
6.用戶在客戶端或者瀏覽器上得到HTTP請求的響應。
三、Spring
Spring在整個系統(tǒng)體系中提供兩種控架,一種是面向方面編程(AOP)容器框架,另外一種是輕量級的反向控制。
Spring的核心部分是輕量級控制反轉(Inversion of Control,IoC)容器。通過外部的配置文件翻過來調用應用程序來替代原有應用程序調用的控制功能是控制反轉的基本思想。
在框架中進行控制功能的創(chuàng)建工作就實現(xiàn)了輕量級控制反轉,這樣就能使控制功能的編寫其從應用程序的編寫中分離出來。在使用組件調用容器時,那么在框架中的控制功能創(chuàng)建中只需要給出調用組件所用到的對象。典型的輕量級控制反轉工作過程如下:首先創(chuàng)建程序中以后所用到的所有對象,并進行對象屬性設置,對相關的屬性和慣性進行連接配置,最后再確定調用的方法和時間點即可。
Spring架構的反轉控制提供了應用場景和復雜程度不同的兩種注入方式:構造器注入和Setter依賴注入(Dependency Injection)兩種注入方式。Spring支持在實際開發(fā)中應用的最為廣泛方法注入Setter(Setter Injection)方法,這種方法使用起來更加直觀、方便。
四、 Hibernate
在面向對象程序設計中,關系數據庫中的表間的關系與對象間關系的匹配沒有有效的轉換來完成匹配,Hibernate的出現(xiàn)可以很好地完成二者之間的關系匹配問題。
Hibernate可以將對象間關系按照一定的邏輯與數據庫中表之間的關系進行高耦合度的匹配,這種轉換由Hibernate自動進行[20]。使用Hibernate可以減少原來面向對象程序設計時大量的程序與數據庫之間SQL的轉換,有效提高開發(fā)效率。
Hibernate是Java平臺上高效的ORM映射框架。由于Hibernate使用了反射和運行時字節(jié)碼生成技術,所以對于最終用戶而言,Hibernate幾乎是透明地運行。
Hibernate的執(zhí)行流程如圖二所示:
1. 通過實例化Configuration對象,解析文件,建立對象與數據庫之間的映射關系。
2. 通過創(chuàng)建Session工廠,運用session變量,對數據庫進行操作。
3. 通過創(chuàng)建事務Transation,對對象進行持久化操作。
4. 提交事務,關閉打開的會話,結束操作。
縱觀整個開發(fā)過程,Hibernate承接應用程序和基礎數據庫,通過Hibernate,應用程序能夠方便地將對象注入到數據庫中。由執(zhí)行流程可以看出,Hibernate通過配置文件及利用數據庫作為支撐持續(xù)不斷地向應用程序提供服務。換個意思來講,是通過配置文件把普通Java對象直接映射到關系數據庫中,并直接作為關系數據庫的表存儲起來。
SSH是開源的框架技術,它可以部署在AP ACH E等便宜的服務器上,可以脫離大型服務器的約束,從而節(jié)省成本開支。另外,SSH作為一款輕量級的框架,還能夠與異步JavaScript和XML框架同時使用,能夠較大程度上降低系統(tǒng)開銷,還能夠較大幅度改善用戶的體,從而大大提高系統(tǒng)的性能。
參考文獻:
[1]梁立新.項目實踐――基于Struts Spring Hibernate的Java應用開發(fā)[M]. 電子工業(yè)出版社, 2006: 23~24
[2]陳天河. Struts Hibernate Spring集成開發(fā)寶典[M]. 電子工業(yè)出版社, 2007: 56~58
[3]穆福森,吳觀茂. 基于Struts+Spring+Hibe
rnate Web應用開發(fā)框架技術[J].電腦知識與技術, 2006(2): 81~82
[4]羅時飛. 精通Spring2.0[M]. 電子工業(yè)出版社, 2007: 50~57