版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章Web開發(fā)框架10.1開發(fā)框架簡介10.2Struts開發(fā)框架技術10.3Hibernate技術10.4Spring技術10.5Struts+Spring+Hibernate體系結構習題
10.1開發(fā)框架簡介
伴隨著軟件開發(fā)技術的發(fā)展,可重用、易擴展的組件越來越為人們所青睞。由于將相同類型問題的解決途徑進行了抽象,抽取成了一個應用框架(Framework),因此人們可以把注意力更加集中在分析、構建業(yè)務邏輯的應用上,而非繁雜的代碼上。10.1.1框架技術概述
1.什么是框架
開放源代碼軟件的興起,使得各種各樣的框架紛紛出現。例如,Apache組織下就擁有諸多的框架類產品,包括國內很熟悉的struts。那么,什么是框架呢?
在設計模式中,Gamma等人為框架給出了一個定義:“框架就是一組協同工作的類,它們?yōu)樘囟愋偷能浖嬛艘粋€可重用的設計。”
由這個定義可以看出,框架是針對特定的問題領域的,它包括了一組抽象概念,并且這些抽象概念來源于問題領域。例如,struts是基于MVC模式進行設計,通過model、view、control建立抽象概念的??蚣苁沟眠@些抽象概念相互協作,并提供了一種擴展的形式,以實現重用。
總的來說,軟件框架是項目軟件開發(fā)過程中提取特定領域軟件的共性部分形成的體系結構,不同領域的軟件項目有著不同的框架類型。框架的作用在于:由于提取了特定領域軟件的共性部分,因此在此領域內新項目的開發(fā)過程中代碼不需要從頭編寫,只需要在框架的基礎上進行一些開發(fā)和調整便可滿足要求;對于開發(fā)過程而言,這樣做會提高軟件的質量,降低成本,縮短開發(fā)時間。值得注意的是:
(1)框架不是現成可用的應用系統,它是一個半成品,是需要后來的開發(fā)人員進行二次開發(fā),實現具體功能的應用系統。
(2)框架不是工具包或者類庫,調用API并不是在使用框架開發(fā)。框架構成了通用的、具有一般性的系統主體部分,二次開發(fā)人員只是像做填空題一樣,根據具體業(yè)務,完成特定應用系統中與眾不同的特殊部分。
2.模式與框架
模式的英文即Pattern,是解決某一類問題的方法的總結。Alexander給出的經典定義是:每個模式都描述了一個環(huán)境中不斷出現的問題,描述了該問題的解決方案的核心。通過這種方式,可以無數次地使用已有的解決方案,而無需重復相同的工作。模式的意義在于模式是一種指導,在一個良好的指導下,有助于完成任務,有助于作出一個優(yōu)良的設計方案,達到事半功倍的效果,而且會得到解決問題的最佳辦法??蚣艿挠⑽募磃ramework,是某種應用的半成品,是一組組件,供選用者完成自己的系統。模式和框架在軟件設計中是兩個不同的研究領域。模式研究的是一個設計問題的解決方法,一個模式可應用于不同的框架和被不同的語言所實現;而框架則是一個應用的體系結構,是一種或多種設計模式和代碼的混合體。雖然它們有所不同,但卻共同致力于使人們的設計可以被重用,在思想上存在著統一性的特點,因而模式的思想可以在框架設計中進行應用??蚣芎湍J酱嬖谥@著的區(qū)別,主要表現在二者提供的內容和要應用的領域上:
(1)從應用領域上看,框架給出的是整個應用的體系結構,而模式則給出了單一設計問題的解決方案,并且這個方案可在不同的應用程序或者框架中進行應用。
(2)從內容上看,模式僅是一個單純的設計,這個設計可被不同語言以不同方式來實現,而框架則是設計和代碼的一個混合體,編程者可以用各種方式對框架進行擴展,進而形成完整的不同的應用。
模式比框架更容易移植。框架一旦設計成形,雖然還沒有構成完整的一個應用,但是以其為基礎進行應用的開發(fā)顯然要受制于框架的實現環(huán)境;而模式是與語言無關的,所以可以在更廣泛的異構環(huán)境中進行應用??傊?,框架是軟件,而模式是軟件的知識體,可提升框架的設計水平。10.1.2常見JavaWeb開發(fā)框架
目前Web開發(fā)框架已經有很多,下面介紹一些常用的開發(fā)框架:
◆Struts:是一個基于SunJ2EE平臺的MVC框架,主要是采用Servlet和JSP技術來實現的。由于Struts能充分滿足應用開發(fā)的需求,簡單易用,敏捷迅速,在過去的幾年中頗受關注。Struts把Servlet、JSP、自定義標簽和信息資源(messageresources)整合到一個統一的框架中,開發(fā)人員利用其進行開發(fā)時不用再自己編碼實現全套MVC模式,極大地節(jié)省了時間,所以Struts是一個非常不錯的應用框架?!鬢ebWork:是由OpenSymphony組織開發(fā)的、基于組件化和代碼重用的拉出式MVC模式J2EEWeb框架。WebWork目前的最新版本是2.2.6。WebWork2.x前身是RickardOberg開發(fā)的WebWork,但現在WebWork已經被拆分成了Xwork1和WebWork2兩個項目。Xwork簡潔、靈活、功能強大,它是一個標準的Command模式實現,并且完全從Web層脫離出來。Xwork提供了很多核心功能:前端攔截機(interceptor)、運行時表單屬性驗證、類型轉換、強大的表達式語言(theObjectGraphNotationLanguage,OGNL)、IoC(InversionofControl,倒置控制)容器等。
WebWork2建立在Xwork之上,用來處理HTTP的響應和請求。WebWork2使用ServletDispatcher將HTTP請求變成Action(業(yè)務層Action類)、session(會話)、application(應用程序)范圍的映射以及request請求參數映射。WebWork2支持多視圖表示,視圖部分可以使用JSP、Velocity、FreeMarker、JasperReports、XML等。在WebWork2.2中添加了對AJAX的支持,這支持是構建在DWR與Dojo這兩個框架的基礎之上的?!鬞apestry:是一個基于控件的框架,用它開發(fā)Web應用類似于開發(fā)傳統的GUI應用。用Tapestry開發(fā)Web應用時無需關注以操作為中心的(operation-centric)Servletapi,而是“用對象(objects)、方法(methods)、屬性(properties)替代以往的urls與查詢參數,重新詮釋Web應用開發(fā)?!盩apestry5.0已經發(fā)布,它有大量的改進與新的特性。
◆Spring:是一個服務于所有層面的應用框架,提供了bean的配置基礎、AOP的支持、JDBC的提取框架、抽象事務支持等。它有一個非常顯著的特點:在某個層面上如果不需要Spring的支持,就可以不使用String的class,只使用它的某一部分的功能。◆JSF(JavaServerFaces):并不算是完全的框架,但同樣提供了一種不同的View生成方式。它可以和多種框架整合。在J2EE1.4中,JSP2.0規(guī)范就包含了JSF標準。
◆OPS(OrbeonPresentationServer):是一個開放源代碼的基于J2EE平臺且以XML為中心的Web框架。OPS是圍繞XHTML、Xforms、XSLT、XMLpipelines,與WebServices進行構建的??梢岳肙PS來開發(fā)檢索、處理、表達XML數據的應用程序。不像其它流行Web框架,如Struts或WebWork(它們都是基于Java對象與JSP的),OPS是基于XML文檔與XML技術的。這種結構將為處理、表達、檢索以XML為格式的信息提供一個更好的方案,并且?guī)缀踉趯崿F表達層的時候不需要寫任何Java代碼。10.2Struts開發(fā)框架技術
由于Java代碼和HTML頁面揉和在了一起,代碼的維護比較困難。為了解決這個問題,Apache組織開發(fā)了一個基于JSP的MVC模式的實現——Struts。它是一個用于開發(fā)Web應用程序的概念框架。它是模型—視圖—控制器(Model-View-Controller,MVC)設計范例的一個變體,其中控制器的功能是作為應用程序邏輯(模型)和數據表示(視圖)之間的中間介質。該框架包含一組Java類和JSP標記庫。10.2.1MVCModel1和Model2
在使用Java技術建立Web應用的實例中,JSP技術成為創(chuàng)建Web應用的主要技術。JSP頁面中可以非常容易地插入業(yè)務邏輯(jsp:useBean)、服務端處理過程(jsp:scriplet)和HTML(<html>),從而在JSP頁面中同時實現顯示、業(yè)務邏輯和流程控制,以快速地完成應用開發(fā)。這種以JSP為中心的開發(fā)模型稱為Model1。Model1結構如圖10.1所示。
Model1是一個以JSP文件為中心的模式,在這種模式中JSP頁面不僅負責表現邏輯,也負責控制邏輯,稱之為邏輯耦合在頁面中。這種開發(fā)模式在進行快速和小規(guī)模的應用開發(fā)時具有非常大的優(yōu)勢,但是用Model1模式開發(fā)大型系統時,它的不足之處就顯露出來了。圖10.1Model1結構圖圖10.2稱為Mode12開發(fā)模式,它引入了“控制器”這個概念,控制器一般由Servlet來擔任。客戶端的請求不再直接送給一個處理業(yè)務邏輯的JSP頁面,而是送給這個控制器,再由控制器根據具體的請求調用不同的業(yè)務邏輯,并將處理結果返回到合適的頁面。因此,Servlet控制器為應用程序提供了一個進行前后端處理的中樞。這種模式一方面為輸入數據的驗證、身份認證、日志及實現國際化編程提供了一個合適的切入點,另一方面也提供了將業(yè)務邏輯從JSP文件剝離的可能。業(yè)務邏輯從JSP頁面分離后,JSP文件只需完成顯示任務的功能,即View。而獨立出來的業(yè)務邏輯為Model,再加上控制器本身,就構成了MVC模式。圖10.2MVCModel210.2.2Struts介紹
Struts是一組相互協作的類、Servlet和JSP標記,它們組成一個可重用的MVC2設計。這個定義表示Struts是一個框架,而不是一個庫,但Struts也包含了豐富的標記庫和獨立于該框架工作的實用程序類。圖10.3給出了Struts概覽。圖10.3Struts概覽
1.?Struts概覽
(1)?ClientBrowser(客戶端瀏覽器)。來自客戶端瀏覽器的每個HTTP請求創(chuàng)建一個事件。Web容器將用一個HTTP響應作出響應。
(2)?Controller(控制器)??刂破鹘邮諄碜詾g覽器的請求,并決定將這個請求發(fā)往何處。就Struts而言,控制器是以Servlet實現的一個命令設計模式。struts-config.xml文件用來配置控制器。
(3)業(yè)務邏輯。業(yè)務邏輯更新模型的狀態(tài),并幫助控制應用程序的流程。就Struts而言,這是通過作為實際業(yè)務邏輯“瘦”包裝的Action類完成的。
(4)?Model(模型)的狀態(tài)。模型表示應用程序的狀態(tài)。應用程序的狀態(tài)由業(yè)務對象更新。ActionFormbean在會話級或請求級表示模型的狀態(tài),而不是在持久級。JSP文件使用JSP標記讀取來自ActionFormbean的信息。
(5)?View(視圖)。視圖就是一個JSP文件,其中沒有流程邏輯,沒有業(yè)務邏輯,也沒有模型信息,只有標記。標記是使Struts有別于其他框架的因素之一。
2.?Struts的工作過程
(1)框架初始化。Struts框架總控制器(ActionServlet)完成所有初始化工作??偪刂破魇且粋€Servlet,它通過web.xml配置成自動啟動的Servlet,讀取配置文件(struts-config.xml)的配置信息,為不同的Struts模塊初始化相應的ModuleConfig對象。配置文件中的Action映射定義都保存在ActionConfig集合中,其他配置信息分別保存在ControlConfig、FormBeanConfig、ForwardConfig和MessageResourcesConfig等集合中。
框架初始化的動作在Web容器啟動時自動完成,初始化完成后,它將通過URL匹配映射截獲所有以?.do結尾的URL請求。
(2)客戶端發(fā)送一個HTTP請求。用戶通過提交表單或調用URL向Web應用程序提交一個請求,請求的數據用HTTP協議上傳給Web服務器。
(3)總控制器接收這個請求并實例化FormBean。控制器接收HTTP請求,并從ActionConfig中找出對應該請求的Action子類。如果沒有對應的Action,控制器直接將請求轉發(fā)給JSP或者靜態(tài)頁面。如果有對應的Action且這個Action有一個相應的ActionForm,ActionForm就被實例化并用HTTP請求的數據填充其屬性,然后保存在ServletContext中(或request、session中),這樣它們就可以被其他Action對象或者JSP調用。此外,還可以在ActionForm填充數據后調用validate()進行數據有效性自檢,并且可以返回一個包含所有錯誤信息的ActionErrors對象。如果ActionErrors不空,總控制器直接將請求返回到入口頁面。
(4)控制器將請求轉交給具體的Action處理??刂破鞲鶕渲眯畔⒄埱笄袚Q到具體的Action,這個FormBean也一并傳給這個Action的execute()方法。
(5)?Action完成具體的業(yè)務邏輯操作。Action很簡單,一般只包含一個execute方法,它負責執(zhí)行相應的業(yè)務邏輯,如果需要,它也可能進行相應的數據檢查。執(zhí)行完成之后,返回一個ActionForward對象,控制器通過該ActionForward對象來進行轉發(fā)工作。
(6)?Action返回目標響應對象給總控制器。Action根據業(yè)務處理的不同結果返回一個目標響應對象給總控制器,這個目標響應對象對應一個具體的JSP頁面或另外一個Action。
(7)總控制器將HTTP請求轉換到目標響應對象中。總控制器根據業(yè)務功能Action返回的目標響應對象,將HTTP請求轉換到這個目標響應對象中,一般情況下,它是一個具體的JSP頁面。
(8)目標響應對象將結果展現給用戶。
3.?Struts的安裝
在/Struts下載Struts,建議使用release版。有多種OS版本(Windows、Linus等),下載后解壓,可以看到lib和webapps目錄。webapps下有一些WAR文件。假設Tomcat裝在C:/Tomcat下,則將那些WAR文件拷貝到C:/Tomcat/webapps,重新啟動Tomcat即可。打開瀏覽器,在地址欄中輸入http://localhost:8080/Struts-example/index.jsp,若能見到“poweredbyStruts”的深藍色圖標,即說明安裝成功了。這是Struts自帶的一個例子,附有詳細的說明文檔,可以作為初學者的入門教程。另外,Struts還提供了一些實用對象,如XML處理、通過JavareflectionAPIs自動處理JavaBeans屬性以及國際化的提示和消息等。10.3Hibernate技術
系統邏輯層面是專注于實現數據持久化的一個相對獨立的領域(Domain),這個層面應該擁有一個較為清晰和嚴格的邏輯邊界。目前Java中共有四種常用的實現持久化的模式:JDBC直接訪問數據庫模式、主動域對象模式、CMP模式和ORM模式。常用的ORM中間件有:Hibernate、ApacheOJB、Cayenne、Jaxor、TopLink等。其中Hibernate的輕量級ORM模型逐步確立了在JavaORM架構中的領導地位,甚至有可能取代復雜的EJB模型而成為事實上的JavaORM工業(yè)標準。10.3.1Hibernate技術簡介
Java應用程序運行時,往往把數據封裝為相互連接的對象網絡,手工來執(zhí)行這些任務不僅單調乏味、易于出錯,而且會占用大部分工作量。因此,可以通過對象/關系映射(ORM)工具來改變這種重復性的勞動,使整個過程自動化。
Hibernate就是對象/關系映射(ORM)工具,它是一個免費的開放源代碼Java包,可使得與關系數據庫的通信很簡單。它解放了編程者,使編程者可以專注于應用程序的對象和功能,而不必擔心如何保存它們或稍后如何找到它們。在項目中使用Hibernate框架,非常關鍵的一點就是要了解Hibernate的核心接口。Hibernate接口位于業(yè)務層和持久化層,如圖10.4所示。圖10.4Hibernate核心接口的層次架構關系
Hibernate的核心接口一共有5個,分別為Session、SessionFactory、Transaction、Query和Configuration。這5個核心接口在任何開發(fā)中都會用到。通過這些接口,不僅可以對持久化對象進行存取,還能夠進行事務控制。下面對這五個核心接口分別加以介紹。
(1)?Session接口。Session接口對于Hibernate開發(fā)人員來說是一個最重要的接口。然而在Hibernate中,實例化的Session是一個輕量級的類,創(chuàng)建和銷毀它都不會占用很多資源。這在實際項目中確實很重要,因為在客戶程序中,可能會不斷地創(chuàng)建以及銷毀Session對象,如果Session的開銷太大,會給系統帶來不良影響。但值得注意的是,Session對象是非線程安全的,因此在設計中,最好是一個線程只創(chuàng)建一個Session對象。Hibernate的設計者將Session看做介于數據連接與事務管理的一種中間接口。我們可以將Session想象成一個持久對象的緩沖區(qū),Hibernate能檢測到這些持久對象的改變,并及時刷新數據庫。我們有時也稱Session是一個持久層管理器,因為它包含著一些與持久層相關的操作,諸如存儲持久對象至數據庫,以及從數據庫獲得它們。請注意,Hibernate的Session不同于JSP應用中的HttpSession。當我們使用Session這個術語時,我們指的是Hibernate中的Session,而將HttpSesion對象稱為用戶Session。
(2)?SessionFactory接口。SessionFactroy接口負責初始化Hibernate。它充當數據存儲源的代理,并負責創(chuàng)建Session對象。這里用到了工廠模式。需要注意的是,SessionFactory并不是輕量級的。實際上它的設計者的意圖是讓它能在整個應用中共享。典型情況下,一個項目通常只需要一個SessionFactory就夠了,但是當項目要操作多個數據庫時,就必須為每個數據庫指定一個SessionFactory。
(3)?Configuration接口。Configuration接口負責配置并啟動Hibernate,創(chuàng)建SessionFactory對象。在Hibernate的啟動過程中,Configuration類的實例首先定位映射文檔位置、讀取配置,然后創(chuàng)建SessionFactory對象。
(4)?Transaction接口。Transaction接口負責與事務相關的操作。它是可選的,開發(fā)人員也可以設計編寫自己的底層事務處理代碼。
(5)?Query接口。Query接口負責執(zhí)行各種數據庫查詢。它可以使用HQL語言或SQL語句這兩種表達方式。10.3.2Hibernate的使用
1.開發(fā)環(huán)境
(1)?Eclipse3.3;
(2)?Eclipse插件:HibernateSynchronizer;
(3)?Hibernate-2.1.8;
(4)?MySQL5.0。
HibernateSynchronizer是一個Eclipse插件,可以自動生成*.hbm文件、持久化類和DAO,大大降低開發(fā)Hibernate應用的難度,其下載地址為/projects/hibernator。
Hibernate-2.1.8的下載地址是/project/showfiles.php?group_id=40712&package_id=72467&release_id=301006。
MySQL5.0的下載地址是。
2.數據庫
首先在MySQL里建立一個新的數據庫webtest,再建立一個數據表,名為user,包含ID、Name、Sex、Address四個字段,建表語句如下:
CREATETABLE‘user’(
'ID'int(12)NOTNULLauto_increment,
'Name'varchar(10)NOTNULLdefault'
',
'Sex'char(1)defaultNULL,
'Address'varchar(200)defaultNULL,
PRIMARYKEY(`ID`)
)TYPE=MyISAM;
3.安裝插件
安裝Eclipse插件有以下三種方法:
(1)使用Eclipse的SoftwareUpdates/Findandinstall...searchfornewfeatures...,輸入軟件安裝地址進行安裝。
(2)下載插件文件,將其解壓縮到Eclpise對應的目錄中。重起Eclipse,如果插件不能生效,則刪除eclipse\configuration\org.eclipse.update目錄后再啟動Eclipse。
(3)?links文件方式。在Eclipse目錄中新建links子目錄(這里以jode為例),創(chuàng)建插件存放目錄eclipsePlugins\jode\eclipse。將plugins解壓到Eclipse目錄中,這樣Eclipse中就有了兩個插件目錄features和plugins。在links目錄中建立一個以link為擴展名的文本文件,如jode.link,內容為path=disk:/eclipsePlugs/jode。重啟Eclipse插件就會安裝完成。
4.建立項目并使用Hibernate
新建一個普通的Java項目。打開【File】菜單,選擇【Project】下的【NewProject】下的【JavaProject】。注意加入Hibernate的所有l(wèi)ib文件,包括Hibernate下面的hibernate2.jar和lib目錄下面的所有?.jar文件,如圖10.5所示;還要加入MySQL的jdbc驅動文件,比如mysql-connector-java-5.0.8-bin.jar。驅動程序請自己選擇加載,版本不同,文件名也不同。圖10.5Java項目的完整lib文件
下面需要在項目中加入一個Hibernate的配置文件。在src目錄下選擇【New】下的【Other】下的【Hibernate】下的【HibernateConfigurationFile】,在彈出的界面中,指定要使用的數據庫,以及連接數據庫所需要的信息。這里選擇的數據庫為MySQL,并配置了數據庫的URL和管理員帳號與密碼,如圖10.6所示。圖10.6配置數據庫單擊“Finish”按鈕之后系統會自動生成一個名為hibernate.cfg.xml的文件,里面包含了基本的配置信息,如果需要高級配置,可以手動配置,也可以通過其他插件來進行編輯。下面加入“*.hbm”配置文件。同樣地,選擇該項目,單擊右鍵,從【New】下的【Other】進入,不過這次要選擇的是“HibernateMappingFile”,單擊“Next”按鈕進入如圖10.7所示界面。注意,如果數據庫有密碼,則先要輸入密碼再單擊“Refresh”按鈕,數據中的表就會顯示在Tables框中。選擇一個表,如user,單擊“Finish”按鈕。接下來簡單地增加幾行代碼就可以了。進入系統生成的包DAO中,如果所有的配置正確,UserDAO類就應該可以運行了。圖10.7HibernateMappingFile
10.4Spring技術
Spring是2002年末RodJohnson所著《ExpertOne-on-OneJ2EEDesignandDevelopment》一書的基礎框架代碼。2003年2月,Rod在SourceF公開了框架源代碼。后來,這個框架就演變成了著名的Spring框架。Rod和JuergenHoeller是Spring的首要開發(fā)人員和核心人物。
10.4.1Spring技術簡介
Spring是為了解決企業(yè)應用程序開發(fā)復雜性而創(chuàng)建的。該框架的主要優(yōu)勢之一就是其分層架構。分層架構允許使用者選擇使用一個組件,同時為J2EE應用程序開發(fā)提供集成的框架。Spring的核心思想是IoC和AOP,下面分別介紹。
1.?IoC
IoC英文為InversionofControl,即控制反轉(也稱做依賴注入)。其具體含義是:當某個角色(可能是一個Java實例,調用者)需要另一個角色(另一個Java實例,被調用者)的協助時,在傳統的程序設計過程中,通常由調用者來創(chuàng)建被調用者的實例(如圖10.8所示),但在Spring里,創(chuàng)建被調用者的工作不再由調用者來完成,因此稱為控制反轉。創(chuàng)建被調用者實例的工作通常由Spring容器來完成,然后注入調用者(如圖10.9所示),因此也稱之為依賴注入。在典型的IoC場景中,容器創(chuàng)建了所有對象,并設置必要的屬性將它們連接在一起,決定什么時間調用方法。圖10.8傳統模式:由對象A創(chuàng)建了對象B和C
圖10.9IoC模式:對象A包含了seta(B)和setC(c)方法不管是依賴注入,還是控制反轉,都說明Spring是采用動態(tài)、靈活的方式來管理各種對象的,對象與對象之間的具體實現互相透明。通過如下一個比喻,可以了解Java技術的發(fā)展軌跡。
一個人(Java實例,調用者)需要一把斧子(Java實例,被調用者)。
(1)原始社會里,幾乎沒有社會分工。需要斧子的人(調用者)只能自己去磨一把斧子(被調用者)。對應的情形為:Java程序里的調用者自己創(chuàng)建被調用者。
(2)進入工業(yè)社會,工廠出現,斧子不再由普通人完成,而在工廠里被生產出來。此時需要斧子的人(調用者)找到工廠,購買斧子,無需關心斧子的制造過程。對應Java程序的簡單工廠的設計模式。
(3)進入“按需分配”社會,需要斧子的人不需要找到工廠,坐在家里發(fā)出一個簡單指令:需要斧子,斧子就自然出現在他面前。對應Spring的依賴注入。第一種情況下,Java實例的調用者創(chuàng)建被調用的Java實例,必然要求被調用的Java類出現在調用者的代碼里,這樣無法實現二者之間的松耦合。
第二種情況下,調用者無需關心被調用者的具體實現過程,只需要找到符合某種標準(接口)的實例即可使用。此時調用的代碼面向接口編程,可以讓調用者和被調用者解耦,這也是工廠模式大量使用的原因。但調用者需要自己定位工廠,調用者與特定工廠耦合在一起。第三種情況下,調用者無需自己定位工廠,程序運行到需要被調用者時,系統自動提供被調用者實例。事實上,調用者和被調用者都處于Spring的管理下,二者之間的依賴關系由Spring提供。
IoC中最基本的Java技術就是“反射”編程。反射又是一個生澀的名詞,通俗地說反射就是根據給出的類名(字符串)來生成對象。反射技術可以讓對象在生成時才決定要生成哪一種對象。反射的應用很廣范,Hibernate、Springy中用“反射”作為最基本的技術手段。
2.?AOP
面向方面的編程,即AOP,是一種編程技術,它允許程序員對橫切關注點或橫切典型的職責分界線的行為(例如日志和事務管理)進行模塊化。AOP的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。AOP和IoC是補充性的技術,它們都運用模塊化方式解決企業(yè)應用程序開發(fā)中的復雜問題。在典型的面向對象開發(fā)方式中,可能要將日志記錄語句放在所有方法和Java類中才能實現日志功能。在AOP方式中,可以反過來將日志服務模塊化,并以聲明的方式將它們應用到需要日志的組件上。當然,這樣做的優(yōu)勢就是Java類不需要知道日志服務的存在,也不需要考慮相關的代碼。所以,用SpringAOP編寫的應用程序代碼是松耦合的。10.4.2Spring的結構組成
Spring框架是一個分層架構,由7個定義良好的模塊組成。Spring模塊構建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方式,如圖10.10所示。
組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:
(1)核心容器(SpringCore)。核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實現。BeanFactory使用控制反轉(IoC)模式將應用程序的配置和依賴性規(guī)范與實際的應用程序代碼分開。
(2)?Spring上下文(SpringContext)。Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務,例如JNDI、EJB、電子郵件、國際化、校驗和調度功能。
(3)?SpringAOP。通過配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中,所以可以很容易地使Spring框架管理的任何對象支持AOP。SpringAOP模塊為基于Spring的應用程序中的對象提供了事務管理服務。通過使用SpringAOP,不用依賴EJB組件,就可以將聲明性事務管理集成到應用程序中。
(4)?SpringDAO。JDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結構。
(5)?SpringORM。Spring框架插入了若干個ORM框架,從而提供了ORM的對象關系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務和DAO異常層次結構。
(6)?SpringWeb模塊。Web上下文模塊建立在應用程序上下文模塊之上,為基于Web的應用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。
(7)?SpringMVC框架。MVC框架是一個全功能的構建Web應用程序的MVC實現。通過策略接口,M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- xxx民辦學校消防管理制度
- 初中生物實驗錯誤預防與教學效果評估教學研究課題報告
- 2026年教育技術應用與教學設計題庫
- 2026年食品藥品行業(yè)質量管理體系知識考核試題
- 裝配式樓板支撐施工方案(青島華發(fā))
- 2026年1月重慶市永川區(qū)衛(wèi)星湖街道辦事處招聘公益性崗位人員2人備考題庫及答案詳解1套
- 2026中華書局有限公司招聘4人備考題庫(北京)帶答案詳解
- 2026中國熱帶農業(yè)科學院橡膠研究所第一批招聘工作人員30人備考題庫及一套答案詳解
- 2026山東濟南市濟陽區(qū)所屬事業(yè)單位招聘初級綜合類崗位人員備考題庫及答案詳解(考點梳理)
- 2026年度淄博高新區(qū)事業(yè)單位面向退役大學生士兵公開招聘綜合類(專項)崗位工作人員備考題庫及一套答案詳解
- 《筑牢安全防線 歡度平安寒假》2026年寒假安全教育主題班會課件
- 養(yǎng)老院老人生活設施管理制度
- 2026年稅務稽查崗位考試試題及稽查實操指引含答案
- (2025年)林業(yè)系統事業(yè)單位招聘考試《林業(yè)知識》真題庫與答案
- 《房顫的藥物治療》課件
- 租賃手機籌資計劃書
- 短篇文言文翻譯
- 疾病產生分子基礎概論
- 演示文稿第十五章文化中心轉移
- 醫(yī)療設備購置論證評審表
- GB/T 16998-1997熱熔膠粘劑熱穩(wěn)定性測定
評論
0/150
提交評論