Java-EE-SSH框架應(yīng)用開(kāi)發(fā)項(xiàng)目教程-第11章Spring框架(IoC和AOP)課件_第1頁(yè)
Java-EE-SSH框架應(yīng)用開(kāi)發(fā)項(xiàng)目教程-第11章Spring框架(IoC和AOP)課件_第2頁(yè)
Java-EE-SSH框架應(yīng)用開(kāi)發(fā)項(xiàng)目教程-第11章Spring框架(IoC和AOP)課件_第3頁(yè)
Java-EE-SSH框架應(yīng)用開(kāi)發(fā)項(xiàng)目教程-第11章Spring框架(IoC和AOP)課件_第4頁(yè)
Java-EE-SSH框架應(yīng)用開(kāi)發(fā)項(xiàng)目教程-第11章Spring框架(IoC和AOP)課件_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、JavaEE SSH框架應(yīng)用開(kāi)發(fā) 第2版第11章 Spring框架(IoC和AOP)Spring概述Spring的一個(gè)最大的目的就是使J2EE開(kāi)發(fā)變得更加容易。同時(shí),Spring之所以與Struts、Hibernate等框架不同,是因?yàn)镾pring致力于提供一個(gè)以統(tǒng)一的、高效的方式構(gòu)造整個(gè)應(yīng)用程序,并且可以將單層框架以最佳的組合揉和在一起??梢哉f(shuō)Spring是一個(gè)提供了更完善開(kāi)發(fā)環(huán)境的一個(gè)框架,可以為POJO(Plain Old Java Object)對(duì)象提供企業(yè)級(jí)的服務(wù)。Spring組成模塊Spring框架由七個(gè)定義明確的模塊組成,這些模塊為你提供了開(kāi)發(fā)企業(yè)應(yīng)用所需的一切。但你可以自由地挑

2、選適合你的應(yīng)用的模塊而忽略其余的模塊。Spring的特征容器 首先它是一個(gè)容器,Spring包含并管理JavaBean的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建,你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例,以及bean之間的關(guān)系。框架Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被配置在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),所以它本身也是一個(gè)功能強(qiáng)大的框架。輕量從大小與開(kāi)銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多

3、的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷也是微不足道的。此外,Spring是非侵入式的,即Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類,從這點(diǎn)上我們也可以理解為,我們的應(yīng)用程序與Spring框架是松耦合的。Spring特征控制反轉(zhuǎn)IoCSpring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)你使用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。面向切面AOPSpring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與其它系統(tǒng)級(jí)服

4、務(wù)進(jìn)行開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們的業(yè)務(wù)邏輯就可以了,與應(yīng)用無(wú)關(guān)但又必須要的一些代碼,如日志記錄、事務(wù)處理、錯(cuò)誤處理等功能,我們可以寫在另外一個(gè)地方,然后由Spring把它們組合在一起運(yùn)行,實(shí)現(xiàn)相應(yīng)的功能。IoC容器依賴注入(Dependence Injection)將組件對(duì)象的控制權(quán)從代碼本身轉(zhuǎn)移到外部容器。在一個(gè)系統(tǒng)中,類與類之間都存在著大量的依賴關(guān)系。大型的項(xiàng)目這種情況尤其突出,少說(shuō)也有上百個(gè)類。如果這成百上千個(gè)類的依賴關(guān)系中,因?yàn)槠渲幸粌蓚€(gè)類出現(xiàn)問(wèn)題,就可能導(dǎo)致整個(gè)系統(tǒng)出現(xiàn)問(wèn)題甚至癱瘓,這樣的系統(tǒng)是很脆弱的。IoC案例實(shí)現(xiàn)汽車、發(fā)動(dòng)機(jī)和輪胎的依賴注入具體步驟和代碼參見(jiàn)書本使用p命名空間在新

5、版本的Spring中:加入了使用p命名空間注入屬性值,它的特點(diǎn)是使用的屬性而不是子元素的形式配置Bean的屬性注入,從而簡(jiǎn)化配置代碼。比如:可以改成:p命名空間的語(yǔ)法運(yùn)行的效果是一樣的,p命名空間的語(yǔ)法是:對(duì)于傳值(基本數(shù)據(jù)類型、字符串)屬性:p:屬性名=屬性值對(duì)于傳引用類型Bean的屬性:p:屬性名-ref=Bean的id使用前要先要在Spring配置文件中引入p命名空間,這句在MyEclipse默認(rèn)產(chǎn)生的配置文件中就已經(jīng)配置了:xmlns:p=/schema/p自動(dòng)注入通過(guò)上面的applicationContext.xml配置文件會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,當(dāng)一個(gè)類需要注入的屬性特別多的時(shí)候,就需要寫

6、大量的注入代碼。尤其是大量項(xiàng)目,有大量的類需要注入。Spring提供了自動(dòng)注入的方式減少開(kāi)發(fā)者的工作量。比如這一句:自動(dòng)注入取值取 值說(shuō) 明no默認(rèn)值default。Spring 默認(rèn)不進(jìn)行自動(dòng)裝配,必須顯式指定依賴對(duì)象 byName根據(jù)屬性名自動(dòng)裝配。Spring 自動(dòng)查找與屬性名相同的id,如果找到,則自動(dòng)注入,否則什么都不做byType根據(jù)屬性的類型自動(dòng)裝配。Spring 自動(dòng)查找與屬性類型相同的Bean,如果剛好找到唯一的那個(gè),則自動(dòng)注入;如果找到多個(gè)與屬性類型相同的Bean,則拋出異常;如果沒(méi)找到,就什么也不做constructor和byType 類似,不過(guò)它針對(duì)構(gòu)造方法。如果 Sp

7、ring 找到一個(gè)Bean和構(gòu)造方法的參數(shù)類型相匹配,則通過(guò)構(gòu)造注入該依賴對(duì)象;如果找不到,將拋出異常 構(gòu)造器注入其它代碼不變,運(yùn)行結(jié)果也是一樣的。這就是構(gòu)造器注入,只是換了一種方式而已。構(gòu)造器注入的幾個(gè)要點(diǎn):一個(gè)元素表示構(gòu)造方法的一個(gè)參數(shù),且使用時(shí)不區(qū)分順序。通過(guò)元素的index 屬性可以指定該參數(shù)的位置索引,位置從0 開(kāi)始。元素還提供了type 屬性用來(lái)指定參數(shù)的類型,避免字符串和基本數(shù)據(jù)類型的混淆。Bean的作用域以前bean只有2種作用域即:singleton(單例)、non-singleton(也稱 prototype), Spring2.0以后,增加了session、request

8、、global session三種專用于Web應(yīng)用程序上下文的Bean。singleton作用域 (scope 默認(rèn)值)prototypesession、request、global session自定義bean裝配作用域AOP概述AOP(Aspect Orient Programming面向切面編程):之前我們學(xué)過(guò)面向?qū)ο缶幊蹋∣OP),OOP是從靜態(tài)角度考慮程序結(jié)構(gòu),(AOP)則是從動(dòng)態(tài)角度考慮程序的運(yùn)行過(guò)程。AOP的原理:將復(fù)雜的需求分解出不同方面,將散布在系統(tǒng)中的公共功能集中解決。AOP 的作用:處理一些具有橫切性質(zhì)的系統(tǒng)性服務(wù),如事物管理、安全檢查、緩存、對(duì)象池管理等。AOP的實(shí)現(xiàn)A

9、OP 編程其實(shí)并不難??梢院?jiǎn)單分成三個(gè)步驟:定義普通業(yè)務(wù)功能的實(shí)現(xiàn)(即漢堡包中的雞肉)。定義切入點(diǎn),一個(gè)切入點(diǎn)可能橫切多個(gè)業(yè)務(wù)方法(面包和蔬菜)。定義增強(qiáng)處理,增強(qiáng)處理就是在 AOP 框架為普通業(yè)務(wù)功能織入的處理(把三者疊在一起,做成漢堡)。AOP代碼增強(qiáng)前置增強(qiáng)(Before advice):在某連接點(diǎn)之前執(zhí)行的增強(qiáng),但這個(gè)增強(qiáng)不能阻止連接點(diǎn)之前的執(zhí)行流程(除非它拋出一個(gè)異常)。后置增強(qiáng)(After returning advice):在某連接點(diǎn)正常完成后執(zhí)行的增強(qiáng):例如,一個(gè)方法沒(méi)有拋出任何異常,正常返回。異常增強(qiáng)(After throwing advice):在方法拋出異常退出時(shí)執(zhí)行的增

10、強(qiáng)。最終增強(qiáng)(After (finally) advice):當(dāng)某連接點(diǎn)退出的時(shí)候執(zhí)行的增強(qiáng)(不論是正常返回還是異常退出)。AOP環(huán)繞增強(qiáng)(Around Advice):包圍一個(gè)連接點(diǎn)的增強(qiáng),如方法調(diào)用。這是最強(qiáng)大的一種增強(qiáng)類型。環(huán)繞增強(qiáng)可以在方法調(diào)用前后完成自定義的行為。它也會(huì)選擇是否繼續(xù)執(zhí)行連接點(diǎn)或直接返回它自己的返回值或拋出異常來(lái)結(jié)束執(zhí)行。注解實(shí)現(xiàn)AOP案例請(qǐng)參見(jiàn)書籍注解Aspect 放在類的上面,表示這個(gè)類在Spring容器中是一個(gè)切點(diǎn),要織入的類。Before 前置增強(qiáng)AfterReturning 后置增強(qiáng)Around 環(huán)繞增強(qiáng)AfterThrowing 拋出增強(qiáng)After fina

11、l增強(qiáng),不管是拋出異常或是正常退出,該增強(qiáng)都會(huì)得到執(zhí)行Spring注解管理IoCComponent:通用注解,可以用在任何一個(gè)類上,表示該類定義為Spring管理Bean,使用默認(rèn)value(可選)屬性表示Bean標(biāo)識(shí)符。Repository:用于標(biāo)注DAO類,使用方法與Component相同。Service:用于標(biāo)注業(yè)務(wù)類,使用方法與Component相同。Controller:用于標(biāo)注控制器類,使用方法與Component相同。Autowired:注解實(shí)現(xiàn)Bean的自動(dòng)注入,默認(rèn)按類型進(jìn)行匹配。這個(gè)注解是Spring提供的。Resource的作用相當(dāng)于Autowired,只不過(guò)Autowired按byType自動(dòng)注入,而Resource默認(rèn)按byName自動(dòng)注入,這個(gè)注解是由Java JDK自帶的。Qualifier:按指定名稱匹配進(jìn)行注入。Scope注解指定Bean的作用域。注解應(yīng)用案例以上面的用戶登錄并記錄日志做為案例,這次我們改用Spring注解的方式管理JavaBean,AOP增強(qiáng)處理改成環(huán)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論