SSH輕量級框架實踐課件:Spring原理與應(yīng)用_第1頁
SSH輕量級框架實踐課件:Spring原理與應(yīng)用_第2頁
SSH輕量級框架實踐課件:Spring原理與應(yīng)用_第3頁
SSH輕量級框架實踐課件:Spring原理與應(yīng)用_第4頁
SSH輕量級框架實踐課件:Spring原理與應(yīng)用_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Spring原理與應(yīng)用本章目標(biāo)了解Spring發(fā)展了解Spring的基本組成掌握Spring環(huán)境搭建掌握實例化Bean的三種方法了解Bean的作用域范圍本章簡介前面我們已經(jīng)學(xué)習(xí)了Struts框架和Hibernate框架,從本章開始,我們學(xué)習(xí)Spring框架。Spring到今天已經(jīng)發(fā)展為一個功能豐富而且易用的集成框架,但其最重要也是最基本的還是它對“依賴注入(DependencyInjection,DI)”模式和“面向方面編程(Aspect-Orientedprogramming,AOP)”原理的優(yōu)秀實現(xiàn)。通過前面的學(xué)習(xí)我們認(rèn)識到,框架可以幫助我們構(gòu)建規(guī)范的、優(yōu)秀的應(yīng)用程序,還會幫我們簡化繁瑣的編碼過程,Spring的作用兩者兼而有之。Spring的目標(biāo)就是“使JavaEE更易用并促進好的編程習(xí)慣”。Struts是第一個開源的JavaWeb框架,給我們提供了優(yōu)秀的MVC支持;Hibernate大大簡化了持久化的代碼。Spring更大意義上充當(dāng)了黏合劑和潤滑劑的角色,它對Struts、Hibernate等技術(shù)都提供了良好的支持,能夠把現(xiàn)有的Java系統(tǒng)柔順地整合起來,并讓它們更易用。同時自身還提供了聲明式事務(wù)等企業(yè)級開發(fā)不可或缺的功能。在EJB盛行于世的時代,J2EE(JavaEE之前稱作J2EE)變得龐大和沉重,開發(fā)人員在嚴(yán)冬中堅忍前行。2003年春天,Spring降臨世間,從此,Java世界改變了。Spring概述組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯(lián)合實現(xiàn)。每個模塊的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(IoC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開。Spring上下文:Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國際化、校驗和調(diào)度功能。SpringAOP:通過配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何對象支持AOP。SpringAOP模塊為基于Spring的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)。通過使用SpringAOP,不用依賴EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。Spring概述SpringDAO:JDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息。異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結(jié)構(gòu)。SpringORM:Spring框架插入了若干個ORM框架,從而提供了ORM的對象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務(wù)和DAO異常層次結(jié)構(gòu)。SpringWeb模塊:Web上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于Web的應(yīng)用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ?。SpringMVC框架:MVC框架是一個全功能的構(gòu)建Web應(yīng)用程序的MVC實現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術(shù),其中包括JSP、Velocity、Tiles、iText和POI。Spring的優(yōu)點Spring是一個開源框架,是為了解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性而創(chuàng)建的??蚣艿闹饕獌?yōu)勢之一就是其分層架構(gòu),分層架構(gòu)允許您選擇使用哪一個組件,同時為J2EE應(yīng)用程序開發(fā)提供集成的框架??偨Y(jié)起來,Spring具有以下優(yōu)點:提供了一個一致的編程模型。旨在促進代碼重用。旨在促進面向?qū)ο蟮脑O(shè)計。致力于推動好的編程習(xí)慣,如用接口編程。Spring改進了從Java代碼中提取配置值到XML或者屬性文件中的方法。在項目中引入Spring立即可以帶來下面的好處:降低組件之間的耦合度,實現(xiàn)軟件各層之間的解耦。Spring的優(yōu)點可以使用容器提供的眾多服務(wù),如:事務(wù)管理服務(wù)、消息服務(wù)等等。當(dāng)我們使用容器管理事務(wù)時,開發(fā)人員就不再需要手工控制事務(wù)。也不需處理復(fù)雜的事務(wù)傳播。容器提供單例模式支持,開發(fā)人員不再需要自己編寫實現(xiàn)代碼。容器提供了AOP技術(shù),利用它很容易實現(xiàn)如權(quán)限攔截、運行期監(jiān)控等功能。容器提供的眾多輔助類,使用這些類能夠加快應(yīng)用的開發(fā),如:JdbcTemplate、HibernateTemplate。Spring對于主流的應(yīng)用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,這樣更便于應(yīng)用的開發(fā)。Spring核心技術(shù)Spring是一個開源的控制反轉(zhuǎn)(InversionofControl,IoC)和面向切面(AOP)的容器框架。它的主要目的是簡化企業(yè)開發(fā)??刂品崔D(zhuǎn)(InversionofControl,IoC)即好萊塢原則:“Don’tcallme,I’llcallyou.”依賴注入(DependencyInjection,DI):是IoC的具體實現(xiàn),DI的三種實現(xiàn)方式:AOP(Aspect-orientedprogramming)Spring核心技術(shù)面向方面編程給POJO對象提供聲明式的服務(wù),而該對象無需實現(xiàn)特殊的API,將提供(或插入)的服務(wù)獨立出來設(shè)計成對象,這樣的對象稱為Aspect。AOP注重以下幾個方面的管理:事務(wù)管理。日志記錄。故障監(jiān)控。測試。IoC控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務(wù)連接,但在配置文件中描述哪一個組件需要哪一項服務(wù)。容器(在Spring框架中是IoC容器)負(fù)責(zé)將這些聯(lián)系在一起。在典型的IoC場景中,容器創(chuàng)建了所有對象,并設(shè)置必要的屬性將它們連接在一起,決定什么時間調(diào)用方法。下表列出了IoC的一個實現(xiàn)模式。AOP面向方面的編程,即AOP,是一種編程技術(shù),它允許程序員對橫切關(guān)注點或橫切典型的職責(zé)分界線的行為(例如日志和事務(wù)管理)進行模塊化。AOP的核心構(gòu)造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。AOP和IoC是補充性的技術(shù),它們都運用模塊化方式解決企業(yè)應(yīng)用程序開發(fā)中的復(fù)雜問題。在典型的面向?qū)ο箝_發(fā)方式中,可能要將日志記錄語句放在所有方法和Java類中才能實現(xiàn)日志功能。在AOP方式中,可以反過來將日志服務(wù)模塊化,并以聲明的方式將它們應(yīng)用到需要日志的組件上。當(dāng)然,優(yōu)勢就是Java類不需要知道日志服務(wù)的存在,也不需要考慮相關(guān)的代碼。所以,用SpringAOP編寫的應(yīng)用程序代碼是松散耦合的。AOP的功能完全集成到了Spring事務(wù)管理、日志和其他各種特性的上下文中。IoC容器Spring設(shè)計的核心是org.springframework.Beans包,它的設(shè)計目標(biāo)是與JavaBean組件一起使用。這個包通常不是由用戶直接使用,而是由服務(wù)器將其用作其他多數(shù)功能的底層中介。下一個最高級抽象是BeanFactory接口,它是工廠設(shè)計模式的實現(xiàn),允許通過名稱創(chuàng)建和檢索對象。BeanFactory也可以管理對象之間的關(guān)系。BeanFactory支持兩個對象模型:單態(tài):模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton是默認(rèn)的也是最常用的對象模型。對于無狀態(tài)服務(wù)對象很理想。原型:模型確保每次檢索都會創(chuàng)建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。Spring環(huán)境搭建1.導(dǎo)入使用Spring所需要的jar包我們可以到***://***springsource***/download下載Spring框架的源代碼,然后進行解壓縮,在解壓目錄中找到下面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.在項目類路徑下添加Spring的配置文件,Spring環(huán)境搭建3.實例化Spring容器方法一:在類路徑下尋找配置文件來實例化容器ApplicationContextctx=newClassPathXmlApplicationContext(newString[]{"applicationContext.xml"});方法二:在文件系統(tǒng)路徑下尋找配置文件來實例化容器ApplicationContextctx=newFileSystemXmlApplicationContext(newString[]{"d:\\applicationContext.xml"});注意:Spring的配置文件可以指定多個,可以通過String數(shù)組傳入。Spring環(huán)境搭建4.從Spring容器中得到Bean實例當(dāng)Spring容器啟動后,因為Spring容器可以管理Bean對象的創(chuàng)建,銷毀等生命周期,所以我們只需從容器直接獲取Bean對象就行,而不用編寫一句代碼來創(chuàng)建Bean對象。從容器獲取Bean對象的代碼如下:ApplicationContextctx=newClassPathXmlApplicationContext("applicationContext.xml");PersonServiceservice=(PersonService)ctx.getBean("personService");Spring中的Bean在Spring中,Bean的實例化方式有三種使用類構(gòu)造器實例化使用靜態(tài)工廠方法實例化使用實例工廠方法實例化Bean的作用域

1.singleton作用域當(dāng)一個Bean的作用域設(shè)置為singleton,那么SpringIoC容器中只會存在一個共享的Bean實例,并且所有對Bean的請求,只要id與該Bean定義匹配,則只會返回Bean的同一實例。即SpringIoC容器只會創(chuàng)建該Bean定義的唯一實例,這個單一實例會被緩存到單例緩存(singletoncache)中,并且所有針對該Bean的后續(xù)請求和引用都將返回被緩存的對象實例。Bean的作用域

2.prototype作用域prototype作用域部署的Bean,每次請求(將其注入另一個Bean中,或者以程序的方式調(diào)用容器的getBean()方法)都會產(chǎn)生一個新的Bean實例,相當(dāng)于一個new的操作,對于prototype作用域的Bean,有一點非常重要,那就是Spring不能對一個prototypeBean的整個周期負(fù)責(zé),容器在初始化、配置、裝飾或者是裝配完一個prototype實例后,將它交給客戶端,隨后就對該prototype實例不聞不問了。不管何種作用域,容器都會調(diào)用所有對象的初始化生命周期回調(diào)方法,而對prototype而言,任何配置好的析構(gòu)生命周期回調(diào)方法都不會被調(diào)用。清除prototype作用域的對象并釋放任何prototypeBean所持有的昂貴資源,都是客戶端代碼的職責(zé)(讓Spring容器釋放被singleton作用域Bean占用資源的一種可行方式是,通過使用Bean的后置處理器,該處理器持有要被清除的Bean的引用)。Bean的作用域

3.request作用域request表示針對每一次HTTP請求都會產(chǎn)生一個新的Bean,同時該Bean僅在當(dāng)前HTTPrequest內(nèi)有效。request、session、globalsession使用的時候,首先要在初始化Web應(yīng)用的web.xml文件中做如下配置(如果你使用的是Servlet2.4及以上的Web容器,那么你僅需要在Web應(yīng)用的web.xml文件中增加下述ContextListener即可):Bean的作用域

4.session作用域session作用域表示該針對每一次HTTP請求都會產(chǎn)生一個新的Bean,同時該Bean僅在當(dāng)前HTTPsession內(nèi)有效。和request配置實例的前提一樣,配置好Web啟動文件就可以如下配置:<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作用域,不過它僅僅在基于portlet的Web應(yīng)用中才有意義。Portlet規(guī)范定義了全局Session的概念,它被所有構(gòu)成某個portletWeb應(yīng)用的各種不同的portlet所共享。在globalsession作用域中定義的Bean被限定于全局portletSession的生命周期范圍內(nèi)。如果你在Web中使用globalsession作用域來標(biāo)識Bean,那么,Web會自動當(dāng)成session類型來使用。和request配置實例的前提一樣,配置好Web啟動文件就可以如下配置:<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中作用域是可以任意擴展的,你可以自定義作用域,甚至你也可以重新定義已有的作用域(但是你不能覆蓋singleton和prototype),Spring的作用域由接口org.springframework.Beans.factory.config.Scope來定義,自定義自己的作用域只要實現(xiàn)該接口即可。指定Bean的初始化方法和銷毀方法Spring提供了幾個標(biāo)志接口(markerinterface),這些接口用來改變?nèi)萜髦蠦ean的行為;它們包括InitializingBean和DisposableBean?,F(xiàn)這兩個接口的Bean在初始化和析構(gòu)時容器會調(diào)用前者的afterPropertiesSet()方法,以及后者的destroy()方法。Spring在內(nèi)部使用BeanPostProcessor實現(xiàn)來處理它能找到的任何標(biāo)志接口并調(diào)用相應(yīng)的方法。如果你需要自定義特性或者生命周期行為,你可以實現(xiàn)自己的BeanPostProcessor。初始化回調(diào)和析構(gòu)回調(diào):在PersonServiceBean添加init和destroy方法表示初始化方法和銷毀方法什么是“依賴注入”3.實例化Spring容器

溫馨提示

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

評論

0/150

提交評論