spring框架簡介_第1頁
spring框架簡介_第2頁
spring框架簡介_第3頁
spring框架簡介_第4頁
spring框架簡介_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、spring框架簡介Spring系列:Spring框架簡介SpringAOP和IOC容器入門在這由三部分組成的介紹Spring框架的系列文章的第一期中,將開始學習如何用Spring技術構(gòu)建輕量級的、強壯的J2EE應用程序。developerWorks的定期投稿人NaveenBalani通過介紹Spring框架開始了他由三部分組成的Spring系列,其中還將介紹Spring面向方面的編程(AOP和控制反轉(zhuǎn)(IOC)容器。Spring是一個開源框架,是為了解決企業(yè)應用程序開發(fā)復雜性而創(chuàng)建的。框架的主要優(yōu)勢之一就是其分層架構(gòu),分層架構(gòu)允許您選擇使用哪一個組件,同時為J2EE應用程序開發(fā)提供集成的框架

2、。在這篇由三部分組成的Spring系列的第1部分中,我將介紹Spring框架。我先從框架底層模型的角度描述該框架的功能,然后將討論兩個最有趣的模塊:Spring面向方面編程(AOP和控制反轉(zhuǎn)(IOC)容器。接著將使用幾個示例演示IOC容器在典型應用程序用例場景中的應用情況。這些示例還將成為本系列后面部分進行的展開式討論的基礎,在本文的后面部分,將介紹Spring框架通過SpringAOP實現(xiàn)AOP構(gòu)造的方式。請參閱下載,下載Spring框架和ApacheAnt,運行本系列的示例應用程序需要它們。Spring框架Spring框架是一個分層架構(gòu),由7個定義良好的模塊組成。Spring模塊構(gòu)建在核心

3、容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方式,如圖1所示。圖1,Spring框架的7個模塊組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯(lián)合實現(xiàn)。每個模塊的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(IOC)模式將應用程序的配置和依賴性規(guī)范與實際的應用程序代碼分開。Spring上下文:Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務,例如JNDI、EJB、電子郵件、國際化、校驗和調(diào)度功能

4、。SpringAOP通過配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何對象支持AOPSpringAOP模塊為基于Spring的應用程序中的對象提供了事務管理服務。通過使用SpringAOP不用依賴EJB組件,就可以將聲明性事務管理集成到應用程序中。SpringDAOJDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應商拋出的錯誤消息。異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關閉連接)。SpringDAO的面向JDBC的異常遵從通用的D

5、AO異常層次結(jié)構(gòu)。SpringORMSpring框架插入了若干個ORM框架,從而提供了ORM的對象關系工具,其中包括JDO、Hibernate和舊atisSQLMap。所有這些都遵從Spring的通用事務和DAO異常層次結(jié)構(gòu)。SpringWeb模塊:Web上下文模塊建立在應用程序上下文模塊之上,為基于Web的應用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ?。SpringMVC框架:MVC框架是一個全功能的構(gòu)建Web應用程序的MVC實現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量

6、視圖技術,其中包括JSP、Velocity、Tiles、iText和POI。Spring框架的功能可以用在任何J2EE服務器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring的核心要點是:支持不綁定到特定J2EE服務的可重用業(yè)務和數(shù)據(jù)訪問對象。毫無疑問,這樣的對象可以在不同J2EE環(huán)境(Web或EJB)、獨立應用程序、測試環(huán)境之間重用?;仨撌譏OC和AOP控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務連接,但在配置文件中描述哪一個組件需要哪一項服務。容器(在Spring框架中是IOC容器)負責將這些聯(lián)系在一起。在典型的IOC場景中,

7、容器創(chuàng)建了所有對象,并設置必要的屬性將它們連接在一起,決定什么時間調(diào)用方法。下表列出了IOC的一個實現(xiàn)模式。類型1服務需要實現(xiàn)專門的接口,通過接口,由對象提供這些服務,可以從對象查詢依賴性(例如,需要的附加服務)類型2通過JavaBean的屬性(例如setter方法)分配依賴性類型3依賴性以構(gòu)造函數(shù)的形式提供,不以JavaBean屬性的形式公開Spring框架的IOC容器采用類型2和類型3實現(xiàn)。面向方面的編程面向方面的編程, 即AOP,是一種編程技術, 它允許程序員對橫切關注點或橫切典型的職責分界線的行為 (例如日志和事務管理)進行模塊化。AOP的核心構(gòu)造是方面,它將那些影響多個類的行為封裝到

8、可重用的模塊中。AOP和IOC是補充性的技術,它們都運用模塊化方式解決企業(yè)應用程序開發(fā)中的復雜問題。在典型的面向?qū)ο箝_發(fā)方式中,可能要將日志記錄語句放在所有方法和Java類中才能實現(xiàn)日志功能。在AOP方式中,可以反過來將日志服務模塊化,并以聲明的方式將它們應用到需要日志的組件上。當然,優(yōu)勢就是Java類不需要知道日志服務的存在,也不需要考慮相關的代碼。所以,用SpringAOP編寫的應用程序代碼是松散耦合的。AOP的功能完全集成到了Spring事務管理、日志和其他各種特性的上下文中回頁首IOC容器Spring設計的核心是org.springframework.beans包,它的設計目標是與Ja

9、vaBean組件一起使用。這個包通常不是由用戶直接使用,而是由服務器將其用作其他多數(shù)功能的底層中介。下一個最高級抽象是BeanFactory接口,它是工廠設計模式的實現(xiàn),允許通過名稱創(chuàng)建和檢索對象。BeanFactory也可以管理對象之間的關系。BeanFactory支持兩個對象模型。單態(tài)模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton是默認的也是最常用的對象模型。對于無狀態(tài)服務對象很理想。原型模型確保每次檢索都會創(chuàng)建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。bean工廠的概念是Spring作為IOC容器的基礎。IOC將處理事情的責任從應用程

10、序代碼轉(zhuǎn)移到框架。正如我將在下一個示例中演示的那樣,Spring框架使用JavaBean屬性和配置數(shù)據(jù)來指出必須設置的依賴關系。BeanFactory接口因為org.springframework.beans.factory.BeanFactory是一一個簡單接口, 所以可以針對各種底層存儲方法實現(xiàn)。最常用的BeanFactory定義是XmlBeanFactory,它根據(jù)XML文件中的定義裝入bean,如清單1所示。清單1.XmlBeanFactoryBeanFactoryfactory=newXMLBeanFactory(newFileInputSteam(mybean.xml);在XML文

11、件中定義的Bean是被消極加載的,這意味在需要bean之前,bean本身不會被初始化。要從BeanFactory檢索bean,只需調(diào)用getBean()方法, 傳入將要檢索的bean的名稱即可,如清單2所示。清單2.getBean()MyBeanmybean=(MyBean)factory.getBean(mybean);每個bean的定義都可以是POJO(用類名和JavaBean初始化屬性定義)或FactoryBean。FactoryBean接口為使用Spring框架構(gòu)建的應用程序添加了一個間接的級別。回頁首IOC示例理解控制反轉(zhuǎn)最簡單的方式就是看它的實際應用。在對由三部分組成的Spring

12、系列的第1部分進行總結(jié)時,我使用了一個示例, 演示了如何通過SpringIOC容器注入應用程序的依賴關系(而不是將它們構(gòu)建進來)。我用開啟在線信用帳戶的用例作為起點。對于該實現(xiàn),開啟信用帳戶要求用戶與以下服務進行交互:信用級別評定服務,查詢用戶的信用歷史信息。遠程信息鏈接服務,插入客戶信息,將客戶信息與信用卡和銀行信息連接起來,以進行自動借記(如果需要的話)。電子郵件服務,向用戶發(fā)送有關信用卡狀態(tài)的電子郵件?;仨撌兹齻€接口對于這個示例,我假設服務已經(jīng)存在,理想的情況是用松散耦合的方式把它們集成在一起。以下清單顯示了三個服務的應用程序接口。清單3.CreditRatingInterfacepub

13、licinterfaceCreditRatingInterfacepublicbooleangetUserCreditHistoryInformation(ICustomeriCustomer);清單3所示的信用級別評定接口提供了信用歷史信息。它需要一個包含客戶信息的Customer對象。該接口的實現(xiàn)是由CreditRating類提供的。清單4.CreditLinkingInterfacepublicinterfaceCreditLinkingInterfacepublicStringgetUrl();publicvoidsetUrl(Stringurl);publicvoidlinkCred

14、itBankAccount()throwsException;信用鏈接接口將信用歷史信息與銀行信息(如果需要的話)連接在一起,并插入用戶的信用卡信息。信用鏈接接口是一個遠程服務,它的查詢是通過getUrl()方法進行的。URL由Spring框架的bean配置機制設置,我稍后會討論它。該接口的實現(xiàn)是由CreditLinking類提供的。清單5.EmailinterfacepublicinterfaceEmailinterfacepublicvoidsendEmail(ICustomeriCustomer);publicStringgetFromEmail();publicvoidsetFromE

15、mail(StringfromEmail);publicStringgetPassword();publicvoidsetPassword(Stringpassword);publicStringgetSmtpHost();publicvoidsetSmtpHost(StringsmtpHost);publicStringgetUserid();publicvoidsetUserid(Stringuserid);Emailinterface負責向客戶發(fā)送關于客戶信用卡狀態(tài)的電子郵件。郵件配置參數(shù)(例如SMPT主機、用戶名、口令)由前面提到的bean配置機制設置。Email類提供了該接口的實現(xiàn)。

16、回頁首Spring使其保持松散這些接口就位之后,接下來要考慮的就是如何用松散耦合方式將它們集成在一起。在清單6中可以看到信用卡帳戶用例的實現(xiàn)。注意,所有的setter方法都是由Spring的配置bean實現(xiàn)的。所有的依賴關系(也就是三個接口)都可以由Spring框架用這些bean注入。createCreditCardAccount()方法會用服務去執(zhí)行其余實現(xiàn)。在清單7中可以看到Spring的配置文件。我用箭頭突出了這些定義?;仨撌走\行應用程序要運行示例應用程序,首先必須下載Spring框架及其所有依賴文件。接 下 來 , 將 框 架 釋 放 到 ( 比 如 說 ) 磁 盤 , 這 會 創(chuàng) 建

17、C:spring-framework-1.2-rc2(適用于當前發(fā)行版本)這樣的文件夾。在繼續(xù)后面的操作之前,還必須下載和釋放ApacheAnt。接下來, 將源代碼釋放到文件夾, 例如c:盤, 然后創(chuàng)建SpringProject。將Spring庫(即C:spring-framework-1.2-rc2dist下的spring.jar和C:spring-framework-1.2-rc2libjakarta-commons下的commons-logging.jar)復制到SpringProjectlib文件夾中。完成這些工作之后,就有了必需的構(gòu)建依賴關系集。打開命令提示符,將當前目錄切換到Spr

18、ingProject,在命令提示符中輸入以下命令:build。這會構(gòu)建并運行CreateCreditAccountClient類,類的運行將創(chuàng)建Customer類對象并填充它, 還會調(diào)用CreateCreditCardAccount類創(chuàng)建并鏈接信用卡帳戶。CreateCreditAccountClient還會通過ClassPathXmlApplicationContext裝 入bean之 后 , 就 可 以 通 過裝入Spring配置文件getBean()方法訪問它們了,如清單8所示。清單8,裝入Spring配置文件ClassPathXmlApplicationContextappContext=newClassPathXmlApplicationContext(newStringspringexample-creditaccount.xml);CreateCreditCardAccountInterfacecreditCardAccount=(CreateCreditCardAccountInterface)appContext.getBean(createCreditCard);回頁首結(jié)束語在這篇由三部分組

溫馨提示

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

評論

0/150

提交評論