[摘要] 本文根據(jù)教研室工作的特點(diǎn)和需求,設(shè)計(jì)基于J2EE輕量級(jí)框架下的教研室信息化管理系統(tǒng)。采用Spring框架作為業(yè)務(wù)層框架,采用Hibernate框架作為持久層框架。整合集成后的系統(tǒng)層次清晰,代碼耦合度降低,有利于系統(tǒng)的維護(hù)和擴(kuò)展。
[關(guān)鍵詞] Spring; Hibernate; 信息化系統(tǒng); J2EE; 教研室信息化
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2011 . 19. 055
[中圖分類號(hào)]G642 [文獻(xiàn)標(biāo)識(shí)碼]A [文章編號(hào)]1673 - 0194(2011)19- 0095- 03
1引言
教研室是教育管理體制中的最基層單位。搭建教研室信息化平臺(tái),開展教研室信息化管理建設(shè),可以大力推動(dòng)教學(xué)內(nèi)容、教學(xué)手段、教學(xué)評(píng)價(jià)以及師生交流、學(xué)生之間交流等方面的全面創(chuàng)新。在傳統(tǒng)教學(xué)的基礎(chǔ)上,合理進(jìn)行信息化教學(xué),可充分發(fā)揮教師和學(xué)生的積極性、主動(dòng)性和創(chuàng)造性,能有效地促進(jìn)“教為主導(dǎo)”與“學(xué)為主體”的有機(jī)結(jié)合,并且,教研室的最新動(dòng)態(tài)也可在第一時(shí)間通過系統(tǒng)網(wǎng)站展示,達(dá)到宣傳教研室的目的。
鑒于此,本文進(jìn)行了基于J2EE的教研室信息化管理系統(tǒng)的設(shè)計(jì),系統(tǒng)采用B/S結(jié)構(gòu),技術(shù)框架選用Spring和Hibernate這兩個(gè)輕量級(jí)框架,簡化了系統(tǒng)的開發(fā)過程,提高了系統(tǒng)的可擴(kuò)展性和可維護(hù)性。
2系統(tǒng)技術(shù)架構(gòu)分析
2.1J2EE及輕量級(jí)Web框架
J2EE是一種利用Java平臺(tái)來簡化諸多與企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu),核心是一組技術(shù)規(guī)范與指南,其中所包含的組件、服務(wù)架構(gòu)及技術(shù)層次,均有共通的標(biāo)準(zhǔn)及規(guī)格,使各種采用J2EE架構(gòu)的不同平臺(tái)之間具有良好的兼容性。
J2EE框架有許多無可比擬的優(yōu)點(diǎn),但是在項(xiàng)目開發(fā)中卻存在著如下的困擾:(1)有時(shí)在項(xiàng)目開發(fā)中采用EJB等重量級(jí)框架并不是最好的選擇,原因是這些組件提供了許多服務(wù),往往顯得多余。(2)EJB學(xué)習(xí)曲線陡峭,事實(shí)上很少人能完全把握或和理解EJB,因此擴(kuò)展比較困難。(3)EJB建立在各種平臺(tái)之上,造成EJB內(nèi)部比較復(fù)雜,令人難以把握和理解。
針對(duì)上述問題,類似于Spring和Hibernate的輕量級(jí)框架由此產(chǎn)生。所謂的輕量級(jí),并不是功能弱、比重量級(jí)差的代名詞。它的設(shè)計(jì)思想是許多應(yīng)用不需要分布式、不需要重量級(jí)的技術(shù),針對(duì)最常見、最簡單的場景而設(shè)計(jì),等到有特殊需求的時(shí)候,再想辦法解決。
2.2Spring和Hibernate框架
Spring是一個(gè)以依賴注入(IoC)原則和面向方面編程思想(AOP)為基礎(chǔ)的輕量級(jí)框架。IoC是一個(gè)用于“基于組件的體系結(jié)構(gòu)”的設(shè)計(jì)模式,它將“判斷依賴關(guān)系”的職責(zé)移交給容器,而不是由組件本身來判斷彼此之間的依賴關(guān)系。當(dāng)在Spring內(nèi)實(shí)現(xiàn)組件時(shí),容器輕量級(jí)的方便就展現(xiàn)出來了:針對(duì)Spring開發(fā)的組件不需要任何外部庫,并且AOP讓開發(fā)人員可以創(chuàng)建非行為性的橫切關(guān)注點(diǎn),并將它們插入到應(yīng)用程序代碼中。Spring可以很容易地替換業(yè)務(wù)對(duì)象,只要用Java Bean屬性和配置文件加入依賴性,然后就可以很容易地在需要時(shí)替換具有類似接口的協(xié)作對(duì)象。
Hibernate是一個(gè)面向Java環(huán)境的對(duì)象/關(guān)系數(shù)據(jù)庫映射工具。對(duì)象/關(guān)系數(shù)據(jù)庫映射用來把對(duì)象模型表示的對(duì)象映射到基于SQL的關(guān)系模型結(jié)構(gòu)中去。Hibernate不僅僅管理Java類到數(shù)據(jù)庫表的映射,還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開發(fā)時(shí)人工使用SQL和JDBC處理數(shù)據(jù)的時(shí)間。Hibernate本質(zhì)上是一個(gè)提供數(shù)據(jù)庫服務(wù)的中間件,它利用數(shù)據(jù)庫和其他一些配置文件來為應(yīng)用程序提供數(shù)據(jù)持久服務(wù)。
3系統(tǒng)設(shè)計(jì)
建設(shè)教研室信息化管理系統(tǒng)是為了達(dá)到教學(xué)科研信息化、師生交流信息化、對(duì)外展示信息化的目的。系統(tǒng)分為前臺(tái)和后臺(tái),前臺(tái)是用戶訪問的頁面,主要是新聞頁面、師資隊(duì)伍、學(xué)生班級(jí)、教學(xué)資料管理、教研室活動(dòng)、資源共享、BBS、留言板等內(nèi)容;后臺(tái)是系統(tǒng)管理員管理系統(tǒng)信息的平臺(tái)。系統(tǒng)功能模塊較多,但業(yè)務(wù)流程較簡單,應(yīng)采用能夠快速開發(fā),后期易于維護(hù)和擴(kuò)展的框架技術(shù)。根據(jù)這些特點(diǎn),使用Spring+Hibernate框架是最佳選擇。
為了集成兩種框架,必須明確架構(gòu)的層次結(jié)構(gòu)以及每一層次的職責(zé),允許使用接口在層之間進(jìn)行通信。根據(jù)分層原則,把層次分成:表示層、業(yè)務(wù)層和持久層。各層的職責(zé)劃分如圖1所示。
3.1表示層設(shè)計(jì)
Web應(yīng)用的前端是表示層,這里沒有使用現(xiàn)在流行的Struts作為表示層框架,因?yàn)槭褂盟鼤?huì)使表示層過于死板和臃腫,而是設(shè)計(jì)一個(gè)適合項(xiàng)目的類Struts框架來提供相應(yīng)的功能。利用控制器Controler攔截過濾請(qǐng)求;模型組件Action處理請(qǐng)求并返回響應(yīng)數(shù)據(jù);視圖JSP負(fù)責(zé)格式化數(shù)據(jù)并呈現(xiàn)給用戶。同一個(gè)模型可以被不同的視圖重用,并且模型與控制器和視圖保持相對(duì)獨(dú)立,可以方便地改變應(yīng)用程序的業(yè)務(wù)規(guī)則。表示層序列圖如圖2所示。
3.2業(yè)務(wù)層設(shè)計(jì)
Web應(yīng)用的中間組件是業(yè)務(wù)層。用Spring作為業(yè)務(wù)層框架,它提供的功能有:處理應(yīng)用的業(yè)務(wù)邏輯;管理事務(wù);管理與其他層進(jìn)行交互的接口;管理業(yè)務(wù)級(jí)對(duì)象之間的依賴性;實(shí)現(xiàn)表示層的請(qǐng)求。業(yè)務(wù)層對(duì)表示層的統(tǒng)一接口表現(xiàn)為Service。兩層的交互通過Spring IoC控制。當(dāng)Action的請(qǐng)求到達(dá)后,根據(jù)配置文件ApplicationContext.xml中的配置,查找相對(duì)應(yīng)的Bean類,即Service接口。在Service 接口類中定義所需業(yè)務(wù)方法,在它的實(shí)現(xiàn)類ServiceImpl中實(shí)現(xiàn)具體的業(yè)務(wù)方法。由于采用Setter注入方式對(duì)Bean進(jìn)行管理,這樣Bean不再自己查找它們依賴的類而是由容器提供。業(yè)務(wù)層序列圖如圖3所示。
3.3持久層設(shè)計(jì)
使用Hibernate作為架構(gòu)的持久層框架,提供的功能有:查詢對(duì)象中的關(guān)系信息;存儲(chǔ)、更新和刪除存儲(chǔ)在數(shù)據(jù)庫中的信息;完成對(duì)象關(guān)系映射。持久層也按照業(yè)務(wù)層的設(shè)計(jì)方式,設(shè)置了接口、實(shí)現(xiàn)類和配置文件的機(jī)制來方便代碼的解耦。持久層中各個(gè)模塊的業(yè)務(wù)入口是DAO(Data Access Object)接口,DAOImpl類是DAO接口的實(shí)現(xiàn)類,得到具體業(yè)務(wù)的實(shí)現(xiàn),為業(yè)務(wù)層提供數(shù)據(jù)來源。所有DAOImpl都繼承于HibernateDaoSupport類,封裝了必要的方法,如get/set方法。持久層序列圖如圖4所示。
3.4配置文件設(shè)計(jì)
從系統(tǒng)總體架構(gòu)可以看出,表示層、業(yè)務(wù)層和持久層都是通過配置文件ApplicationContext.xml聯(lián)系起來的,下面分析一下配置文件的設(shè)計(jì)。
建立Hibernate的持久層,首先要將域?qū)ο蟪志没#龋椋猓澹颍睿幔簦逋ㄟ^XML文件來映射(O/R)對(duì)象,包括各種關(guān)系的映射,如一對(duì)一,一對(duì)多,多對(duì)一,多對(duì)多子類映射等。以數(shù)據(jù)庫中的User表為例,具體配置如下:
<hibernate-mapping>
<class name="User" table="USER" schema="TongxinDB ">
<id name="id" type="string">
<column name="ID" length="32" />
<generator class="uuid.hex" />
</id>
<many-to-one name="Class" class="Class" fetch="select">
<column name="CLASS_ID" length="32" />
</many-to-one>
……
</class>
</hibernate-mapping>
當(dāng)系統(tǒng)程序和數(shù)據(jù)庫開始會(huì)話Session時(shí),由于數(shù)據(jù)庫操作是被Hibernate封裝起來的,所以數(shù)據(jù)源不需要注入到具體的邏輯類中,只會(huì)被注入給Hibernate的SessionFactory。具體配置如下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" singleton="true">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">¥{hibernate.dialect}</prop><prop key="hibernate.connection.provider_class">org.hibernate.connection. C3P0ConnectionProvider</prop>
……
</props>
</property>
<property name="mappingResources">
<list>
<value>com/hibernate/User.hbm.xml</value>
</list>
</bean>
mappingResoures定義了所要加載的域?qū)ο蟮奈募驅(qū)ο蟮呐渲梦募荚谶@個(gè)屬性中被加載。
業(yè)務(wù)層中的實(shí)現(xiàn)類和持久層中的實(shí)現(xiàn)類的配置,如下所示:
<!—— 配置持久化實(shí)現(xiàn)類 ——>
<bean id="UserDAO"class="com.dao.impl.UserDAOImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!—— 配置業(yè)務(wù)實(shí)現(xiàn)類 ——>
<bean id="UserService" parent="txProxyTemplate">
<property name="target">
<bean class="com. service.impl.UserServiceImpl"singleton="false">
<property name="userDAO" ref="userDAO" />
……
</bean>
</property>
</bean>
可以看出,業(yè)務(wù)層實(shí)現(xiàn)類UserServiceImpl通過配置文件調(diào)用UserDAO接口完成了具體業(yè)務(wù)對(duì)象的操作流程。業(yè)務(wù)層就和持久層中的DAO數(shù)據(jù)操作聯(lián)系了起來。
表示層的UserAction通過配置文件方法ctx()調(diào)用UserService接口,業(yè)務(wù)邏輯就調(diào)用了業(yè)務(wù)對(duì)象,完成了業(yè)務(wù)操作,表示層和業(yè)務(wù)層就聯(lián)系起來了。
綜上,通過對(duì)整個(gè)系統(tǒng)的配置文件,以及各層接口和接口實(shí)現(xiàn)類的關(guān)系,就可以清楚地了解到,系統(tǒng)的三層框架是如何低耦合地聯(lián)系在一起的。
4結(jié)束語
本文將兩個(gè)輕量級(jí)的J2EE框架Spring和Hibernate集成在一起,設(shè)計(jì)了一個(gè)符合具體項(xiàng)目要求的教研室信息化管理系統(tǒng)。經(jīng)實(shí)踐證明,這兩個(gè)開源框架可以很好地實(shí)現(xiàn)表示層、業(yè)務(wù)層及持久層的分離,使系統(tǒng)具有很好的可擴(kuò)展性和可維護(hù)性。本系統(tǒng)現(xiàn)已通過測(cè)試,運(yùn)行穩(wěn)定、效果良好,下一步可在在教研室內(nèi)部及本專業(yè)學(xué)生中推廣使用,逐步實(shí)現(xiàn)教研室的管理信息化、教學(xué)科研信息化、師生交流信息化、對(duì)外展示信息化。
主要參考文獻(xiàn)
[1] 程顯生,郭艷光. 基于Spring和Hibernate數(shù)據(jù)訪問技術(shù)研究與應(yīng)用[J].制造業(yè)自動(dòng)化,2011(5).
[2] 張濤. 使用框架技術(shù)構(gòu)建可重用的J2EE應(yīng)用[J]. 微計(jì)算機(jī)信息,2007(35).
[3] 劉曉華,等. J2EE企業(yè)級(jí)應(yīng)用開發(fā)[M]. 北京:電子工業(yè)出版社,2003.
[4] 夏昕,曹曉鋼,唐勇. 深入淺出Hibernate[M]. 北京:電子工業(yè)出版社, 2005.
[5] 羅時(shí)飛. 精通Spring[M]. 北京:電子工業(yè)出版社,2005.
[6] Ted Husted. Struts in Action[M]. 北京:機(jī)械工業(yè)出版社,2005.