版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Spring原理與應(yīng)用本章目標(biāo)了解Spring發(fā)展了解Spring的基本組成掌握Spring環(huán)境搭建掌握實(shí)例化Bean的三種方法了解Bean的作用域范圍本章簡(jiǎn)介前面我們已經(jīng)學(xué)習(xí)了Struts框架和Hibernate框架,從本章開始,我們學(xué)習(xí)Spring框架。Spring到今天已經(jīng)發(fā)展為一個(gè)功能豐富而且易用的集成框架,但其最重要也是最基本的還是它對(duì)“依賴注入(DependencyInjection,DI)”模式和“面向方面編程(Aspect-Orientedprogramming,AOP)”原理的優(yōu)秀實(shí)現(xiàn)。通過(guò)前面的學(xué)習(xí)我們認(rèn)識(shí)到,框架可以幫助我們構(gòu)建規(guī)范的、優(yōu)秀的應(yīng)用程序,還會(huì)幫我們簡(jiǎn)化繁瑣的編碼過(guò)程,Spring的作用兩者兼而有之。Spring的目標(biāo)就是“使JavaEE更易用并促進(jìn)好的編程習(xí)慣”。Struts是第一個(gè)開源的JavaWeb框架,給我們提供了優(yōu)秀的MVC支持;Hibernate大大簡(jiǎn)化了持久化的代碼。Spring更大意義上充當(dāng)了黏合劑和潤(rùn)滑劑的角色,它對(duì)Struts、Hibernate等技術(shù)都提供了良好的支持,能夠把現(xiàn)有的Java系統(tǒng)柔順地整合起來(lái),并讓它們更易用。同時(shí)自身還提供了聲明式事務(wù)等企業(yè)級(jí)開發(fā)不可或缺的功能。在EJB盛行于世的時(shí)代,J2EE(JavaEE之前稱作J2EE)變得龐大和沉重,開發(fā)人員在嚴(yán)冬中堅(jiān)忍前行。2003年春天,Spring降臨世間,從此,Java世界改變了。Spring概述組成Spring框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(IoC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開。Spring上下文:Spring上下文是一個(gè)配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。SpringAOP:通過(guò)配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何對(duì)象支持AOP。SpringAOP模塊為基于Spring的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過(guò)使用SpringAOP,不用依賴EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。Spring概述SpringDAO:JDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結(jié)構(gòu)。SpringORM:Spring框架插入了若干個(gè)ORM框架,從而提供了ORM的對(duì)象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務(wù)和DAO異常層次結(jié)構(gòu)。SpringWeb模塊:Web上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于Web的應(yīng)用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ?。SpringMVC框架:MVC框架是一個(gè)全功能的構(gòu)建Web應(yīng)用程序的MVC實(shí)現(xiàn)。通過(guò)策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術(shù),其中包括JSP、Velocity、Tiles、iText和POI。Spring的優(yōu)點(diǎn)Spring是一個(gè)開源框架,是為了解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性而創(chuàng)建的。框架的主要優(yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許您選擇使用哪一個(gè)組件,同時(shí)為J2EE應(yīng)用程序開發(fā)提供集成的框架??偨Y(jié)起來(lái),Spring具有以下優(yōu)點(diǎn):提供了一個(gè)一致的編程模型。旨在促進(jìn)代碼重用。旨在促進(jìn)面向?qū)ο蟮脑O(shè)計(jì)。致力于推動(dòng)好的編程習(xí)慣,如用接口編程。Spring改進(jìn)了從Java代碼中提取配置值到XML或者屬性文件中的方法。在項(xiàng)目中引入Spring立即可以帶來(lái)下面的好處:降低組件之間的耦合度,實(shí)現(xiàn)軟件各層之間的解耦。Spring的優(yōu)點(diǎn)可以使用容器提供的眾多服務(wù),如:事務(wù)管理服務(wù)、消息服務(wù)等等。當(dāng)我們使用容器管理事務(wù)時(shí),開發(fā)人員就不再需要手工控制事務(wù)。也不需處理復(fù)雜的事務(wù)傳播。容器提供單例模式支持,開發(fā)人員不再需要自己編寫實(shí)現(xiàn)代碼。容器提供了AOP技術(shù),利用它很容易實(shí)現(xiàn)如權(quán)限攔截、運(yùn)行期監(jiān)控等功能。容器提供的眾多輔助類,使用這些類能夠加快應(yīng)用的開發(fā),如:JdbcTemplate、HibernateTemplate。Spring對(duì)于主流的應(yīng)用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,這樣更便于應(yīng)用的開發(fā)。Spring核心技術(shù)Spring是一個(gè)開源的控制反轉(zhuǎn)(InversionofControl,IoC)和面向切面(AOP)的容器框架。它的主要目的是簡(jiǎn)化企業(yè)開發(fā)??刂品崔D(zhuǎn)(InversionofControl,IoC)即好萊塢原則:“Don’tcallme,I’llcallyou.”依賴注入(DependencyInjection,DI):是IoC的具體實(shí)現(xiàn),DI的三種實(shí)現(xiàn)方式:AOP(Aspect-orientedprogramming)Spring核心技術(shù)面向方面編程給POJO對(duì)象提供聲明式的服務(wù),而該對(duì)象無(wú)需實(shí)現(xiàn)特殊的API,將提供(或插入)的服務(wù)獨(dú)立出來(lái)設(shè)計(jì)成對(duì)象,這樣的對(duì)象稱為Aspect。AOP注重以下幾個(gè)方面的管理:事務(wù)管理。日志記錄。故障監(jiān)控。測(cè)試。IoC控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對(duì)象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對(duì)象和服務(wù)連接,但在配置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)。容器(在Spring框架中是IoC容器)負(fù)責(zé)將這些聯(lián)系在一起。在典型的IoC場(chǎng)景中,容器創(chuàng)建了所有對(duì)象,并設(shè)置必要的屬性將它們連接在一起,決定什么時(shí)間調(diào)用方法。下表列出了IoC的一個(gè)實(shí)現(xiàn)模式。AOP面向方面的編程,即AOP,是一種編程技術(shù),它允許程序員對(duì)橫切關(guān)注點(diǎn)或橫切典型的職責(zé)分界線的行為(例如日志和事務(wù)管理)進(jìn)行模塊化。AOP的核心構(gòu)造是方面,它將那些影響多個(gè)類的行為封裝到可重用的模塊中。AOP和IoC是補(bǔ)充性的技術(shù),它們都運(yùn)用模塊化方式解決企業(yè)應(yīng)用程序開發(fā)中的復(fù)雜問(wèn)題。在典型的面向?qū)ο箝_發(fā)方式中,可能要將日志記錄語(yǔ)句放在所有方法和Java類中才能實(shí)現(xiàn)日志功能。在AOP方式中,可以反過(guò)來(lái)將日志服務(wù)模塊化,并以聲明的方式將它們應(yīng)用到需要日志的組件上。當(dāng)然,優(yōu)勢(shì)就是Java類不需要知道日志服務(wù)的存在,也不需要考慮相關(guān)的代碼。所以,用SpringAOP編寫的應(yīng)用程序代碼是松散耦合的。AOP的功能完全集成到了Spring事務(wù)管理、日志和其他各種特性的上下文中。IoC容器Spring設(shè)計(jì)的核心是org.springframework.Beans包,它的設(shè)計(jì)目標(biāo)是與JavaBean組件一起使用。這個(gè)包通常不是由用戶直接使用,而是由服務(wù)器將其用作其他多數(shù)功能的底層中介。下一個(gè)最高級(jí)抽象是BeanFactory接口,它是工廠設(shè)計(jì)模式的實(shí)現(xiàn),允許通過(guò)名稱創(chuàng)建和檢索對(duì)象。BeanFactory也可以管理對(duì)象之間的關(guān)系。BeanFactory支持兩個(gè)對(duì)象模型:?jiǎn)螒B(tài):模型提供了具有特定名稱的對(duì)象的共享實(shí)例,可以在查詢時(shí)對(duì)其進(jìn)行檢索。Singleton是默認(rèn)的也是最常用的對(duì)象模型。對(duì)于無(wú)狀態(tài)服務(wù)對(duì)象很理想。原型:模型確保每次檢索都會(huì)創(chuàng)建單獨(dú)的對(duì)象。在每個(gè)用戶都需要自己的對(duì)象時(shí),原型模型最適合。Spring環(huán)境搭建1.導(dǎo)入使用Spring所需要的jar包我們可以到***://***springsource***/download下載Spring框架的源代碼,然后進(jìn)行解壓縮,在解壓目錄中找到下面jar文件,拷貝到類路徑下,主要的包如下:dist\spring.jarlib\jakarta-commons\commons-logging.jar如果使用了切面編程(AOP),還需要下列jar文件:lib/aspectj/aspectjweaver.jar和aspectjrt.jarlib/cglib/cglib-nodep-2.1_3.jar如果使用了JSR-250中的注解,如@Resource/@PostConstruct/@PreDestroy,還需要下列jar文件:lib\j2ee\common-annotations.jar2.在項(xiàng)目類路徑下添加Spring的配置文件,Spring環(huán)境搭建3.實(shí)例化Spring容器方法一:在類路徑下尋找配置文件來(lái)實(shí)例化容器ApplicationContextctx=newClassPathXmlApplicationContext(newString[]{"applicationContext.xml"});方法二:在文件系統(tǒng)路徑下尋找配置文件來(lái)實(shí)例化容器ApplicationContextctx=newFileSystemXmlApplicationContext(newString[]{"d:\\applicationContext.xml"});注意:Spring的配置文件可以指定多個(gè),可以通過(guò)String數(shù)組傳入。Spring環(huán)境搭建4.從Spring容器中得到Bean實(shí)例當(dāng)Spring容器啟動(dòng)后,因?yàn)镾pring容器可以管理Bean對(duì)象的創(chuàng)建,銷毀等生命周期,所以我們只需從容器直接獲取Bean對(duì)象就行,而不用編寫一句代碼來(lái)創(chuàng)建Bean對(duì)象。從容器獲取Bean對(duì)象的代碼如下:ApplicationContextctx=newClassPathXmlApplicationContext("applicationContext.xml");PersonServiceservice=(PersonService)ctx.getBean("personService");Spring中的Bean在Spring中,Bean的實(shí)例化方式有三種使用類構(gòu)造器實(shí)例化使用靜態(tài)工廠方法實(shí)例化使用實(shí)例工廠方法實(shí)例化Bean的作用域
1.singleton作用域當(dāng)一個(gè)Bean的作用域設(shè)置為singleton,那么SpringIoC容器中只會(huì)存在一個(gè)共享的Bean實(shí)例,并且所有對(duì)Bean的請(qǐng)求,只要id與該Bean定義匹配,則只會(huì)返回Bean的同一實(shí)例。即SpringIoC容器只會(huì)創(chuàng)建該Bean定義的唯一實(shí)例,這個(gè)單一實(shí)例會(huì)被緩存到單例緩存(singletoncache)中,并且所有針對(duì)該Bean的后續(xù)請(qǐng)求和引用都將返回被緩存的對(duì)象實(shí)例。Bean的作用域
2.prototype作用域prototype作用域部署的Bean,每次請(qǐng)求(將其注入另一個(gè)Bean中,或者以程序的方式調(diào)用容器的getBean()方法)都會(huì)產(chǎn)生一個(gè)新的Bean實(shí)例,相當(dāng)于一個(gè)new的操作,對(duì)于prototype作用域的Bean,有一點(diǎn)非常重要,那就是Spring不能對(duì)一個(gè)prototypeBean的整個(gè)周期負(fù)責(zé),容器在初始化、配置、裝飾或者是裝配完一個(gè)prototype實(shí)例后,將它交給客戶端,隨后就對(duì)該prototype實(shí)例不聞不問(wèn)了。不管何種作用域,容器都會(huì)調(diào)用所有對(duì)象的初始化生命周期回調(diào)方法,而對(duì)prototype而言,任何配置好的析構(gòu)生命周期回調(diào)方法都不會(huì)被調(diào)用。清除prototype作用域的對(duì)象并釋放任何prototypeBean所持有的昂貴資源,都是客戶端代碼的職責(zé)(讓Spring容器釋放被singleton作用域Bean占用資源的一種可行方式是,通過(guò)使用Bean的后置處理器,該處理器持有要被清除的Bean的引用)。Bean的作用域
3.request作用域request表示針對(duì)每一次HTTP請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的Bean,同時(shí)該Bean僅在當(dāng)前HTTPrequest內(nèi)有效。request、session、globalsession使用的時(shí)候,首先要在初始化Web應(yīng)用的web.xml文件中做如下配置(如果你使用的是Servlet2.4及以上的Web容器,那么你僅需要在Web應(yīng)用的web.xml文件中增加下述ContextListener即可):Bean的作用域
4.session作用域session作用域表示該針對(duì)每一次HTTP請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的Bean,同時(shí)該Bean僅在當(dāng)前HTTPsession內(nèi)有效。和request配置實(shí)例的前提一樣,配置好Web啟動(dòng)文件就可以如下配置:<Bean
id="role"
class="com.xtgj.j2ee.chapter08.Bean.Role"
scope="session"/>
<Beanid="role"class="com.xtgj.j2ee.chapter08.Bean.Role"scope="session"/>Bean的作用域
5.globalsession作用域globalsession作用域類似于標(biāo)準(zhǔn)的HTTPSession作用域,不過(guò)它僅僅在基于portlet的Web應(yīng)用中才有意義。Portlet規(guī)范定義了全局Session的概念,它被所有構(gòu)成某個(gè)portletWeb應(yīng)用的各種不同的portlet所共享。在globalsession作用域中定義的Bean被限定于全局portletSession的生命周期范圍內(nèi)。如果你在Web中使用globalsession作用域來(lái)標(biāo)識(shí)Bean,那么,Web會(huì)自動(dòng)當(dāng)成session類型來(lái)使用。和request配置實(shí)例的前提一樣,配置好Web啟動(dòng)文件就可以如下配置:<Bean
id="role"
class="com.xtgj.j2ee.chapter08.Bean.Role"
scope="global
session"/>
<Beanid="role"class="com.xtgj.j2ee.chapter08.Bean.Role"scope="globalsession"/>Bean的作用域
6.自定義Bean裝配作用域在Spring2.0中作用域是可以任意擴(kuò)展的,你可以自定義作用域,甚至你也可以重新定義已有的作用域(但是你不能覆蓋singleton和prototype),Spring的作用域由接口org.springframework.Beans.factory.config.Scope來(lái)定義,自定義自己的作用域只要實(shí)現(xiàn)該接口即可。指定Bean的初始化方法和銷毀方法Spring提供了幾個(gè)標(biāo)志接口(markerinterface),這些接口用來(lái)改變?nèi)萜髦蠦ean的行為;它們包括InitializingBean和DisposableBean。現(xiàn)這兩個(gè)接口的Bean在初始化和析構(gòu)時(shí)容器會(huì)調(diào)用前者的afterPropertiesSet()方法,以及后者的destroy()方法。Spring在內(nèi)部使用BeanPostProcessor實(shí)現(xiàn)來(lái)處理它能找到的任何標(biāo)志接口并調(diào)用相應(yīng)的方法。如果你需要自定義特性或者生命周期行為,你可以實(shí)現(xiàn)自己的BeanPostProcessor。初始化回調(diào)和析構(gòu)回調(diào):在PersonServiceBean添加init和destroy方法表示初始化方法和銷毀方法什么是“依賴注入”3.實(shí)例化Spring容器
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- IT項(xiàng)目進(jìn)度監(jiān)控預(yù)警管理制度
- 三重建機(jī)安全操作手冊(cè)
- 電力設(shè)施防恐應(yīng)急預(yù)案
- 燃油鍋爐課程設(shè)計(jì)目錄
- 懷化學(xué)院《電子政務(wù)理論與實(shí)踐》2021-2022學(xué)年期末試卷
- 懷化學(xué)院《電力電子技術(shù)實(shí)驗(yàn)》2022-2023學(xué)年期末試卷
- 大學(xué)校園手機(jī)使用行為管理制度
- 華中師范大學(xué)《語(yǔ)言基礎(chǔ)知識(shí)教學(xué)論》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024版本國(guó)際貿(mào)易合同樣本
- o-Toluic-acid-Standard-生命科學(xué)試劑-MCE
- 2021年陜西省中小學(xué)教師職稱職務(wù)評(píng)審表
- 大班科學(xué)《指紋的秘密》
- 中醫(yī)情志護(hù)理講義
- 登西臺(tái)慟哭記
- 網(wǎng)店運(yùn)營(yíng)與推廣
- GB/T 17799.2-2023電磁兼容通用標(biāo)準(zhǔn)第2部分:工業(yè)環(huán)境中的抗擾度標(biāo)準(zhǔn)
- 通用版浙江“千萬(wàn)工程”經(jīng)驗(yàn)案例微課PPT
- 走進(jìn)芭蕾-中外芭蕾經(jīng)典作品鑒賞知到章節(jié)答案智慧樹2023年華南師范大學(xué)
- 環(huán)保產(chǎn)品管理規(guī)范
- 中醫(yī)確有專長(zhǎng)綜述范文(5篇)
- 非小細(xì)胞肺癌NCCN指南解讀
評(píng)論
0/150
提交評(píng)論