版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第二章Spring面向切面編程回顧Spring的5大主要模塊是IoC、AOP、測試框架、Web及遠(yuǎn)程操作和數(shù)據(jù)庫訪問集成??刂品崔D(zhuǎn)(InversionofControl,英文縮寫為IoC)是Spring容器的內(nèi)核。Spring的核心配置文件是applicationContext.xml。在Property屬性中,ref屬性用于解決對其他類依賴的問題。在Property屬性中,可以將java.util包中的集合類型注入到BeanFactory。本章內(nèi)容1AOP基本概念和術(shù)語2正則表達(dá)式匹配切面3前置增強(qiáng)1使用Spring的前置和后置增強(qiáng)2使用正則表達(dá)式方式匹配切面使用AOP實(shí)現(xiàn)“網(wǎng)絡(luò)攝像頭”實(shí)踐練習(xí)AOP概念A(yù)OP的專業(yè)術(shù)語增強(qiáng)類型介紹使用AOP完成后置增強(qiáng)技術(shù)講解講解時(shí)間:45分鐘實(shí)踐時(shí)間:45分鐘2.1
AOP基本概念和術(shù)語:內(nèi)容預(yù)覽2.1.1AOP概念A(yù)OP是AspectOrientedProgramming的縮寫,意思是面向切面編程(亦稱為面向方面)。它可以解決程序中的共性問題。
2.1.2
AOP的術(shù)語解釋AOP的關(guān)鍵術(shù)語切面(Aspect)增強(qiáng)(Advice)連接點(diǎn)(Joinpoint)切入點(diǎn)(Pointcut)目標(biāo)對象(Target)代理對象(Proxy)織入(Weaving)AOP為增強(qiáng)定義了org.asoalliance.Advice接口,Spring支持5種類型的增強(qiáng):BeforeAdvice:前置增強(qiáng),表示在目標(biāo)方法執(zhí)行前實(shí)施增強(qiáng)。AfterReturningAdvice:后置增強(qiáng),表示在目標(biāo)方法執(zhí)行后實(shí)施增強(qiáng)。MethodInterceptor:環(huán)繞增強(qiáng),表示在目標(biāo)方法執(zhí)行前后實(shí)施增強(qiáng)。ThrowsAdvice:拋出異常增強(qiáng),表示在目標(biāo)方法拋出異常后實(shí)施增強(qiáng)。IntroductionInterceptor:引介增強(qiáng),表示在目標(biāo)類中添加一些新的方法和屬性。2.1.3增強(qiáng)類型介紹案例說明某日,蘋果公司正在進(jìn)行每年一次的調(diào)查問卷活動(dòng),調(diào)查的目的是統(tǒng)計(jì)iPadmini消費(fèi)者的年齡和性別,收營員會(huì)讓購買iPadmini的顧客填寫一張調(diào)查問卷,作為激勵(lì)措施,收營員會(huì)送給填寫問卷的顧客一張貼膜。實(shí)現(xiàn)步驟創(chuàng)建目標(biāo)類和后置增強(qiáng)類;在applicationContext.xml文件中對目標(biāo)類和后置增強(qiáng)類進(jìn)行注入,并且代理;在測試類中調(diào)用代理對象,查看控制臺(tái)的輸出結(jié)果。使用AOP完成后置增強(qiáng)2.1.4使用AOP完成后置增強(qiáng)1.創(chuàng)建Web工程,添加Spring支持。選擇Spring對AOP的支持。添加Spring
AOP支持2.1.4使用AOP完成后置增強(qiáng)ICustomer.javapublicinterfaceICustomer{ publicvoidbuyIpadMini();}
Customer.javapublicclassCustomerimplementsICustomer{ publicvoidbuyIpadMini(){ System.out.println("購買了一臺(tái)iPadmini"); }}創(chuàng)建客戶類接口,即目標(biāo)對象的接口創(chuàng)建客戶類。實(shí)現(xiàn)ICustomer接口和接口中定義的方法SurveyAfterAdvice.javapublicclassSurveyAfterAdviceimplementsAfterReturningAdvice{
publicvoidafterReturning(ObjectreturnObj,Methodmethod,Object[]args,Objectobj)throwsThrowable{System.out.println("幫助Apple公司完成問卷,送給客戶一張貼膜!");}}實(shí)現(xiàn)后置增強(qiáng),該類實(shí)現(xiàn)AfterReturningAdvice接口和接口中定義的方法2.1.4使用AOP完成后置增強(qiáng)2.創(chuàng)建目標(biāo)類和后置增強(qiáng)類。applicationContext.xml<!--注入后置增強(qiáng)--> <beanid="surveyAfterAdvice"class="com.mstf.advice.SurveyAfterAdvice"/>
<!--注入目標(biāo)對象--><beanid="target"class="com.mstf.bean.Customer"/>
<!--定義代理對象--><beanid="customerBean"class="org.springframework.aop.framework.ProxyFactoryBean"p:proxyInterfaces="com.mstf.bean.ICustomer"p:target-ref="target" p:interceptorNames="surveyAfterAdvice"/>注入后置增強(qiáng)注入目標(biāo)對象定義代理對象2.1.4使用AOP完成后置增強(qiáng)3.在applicationContext.xml文件中對目標(biāo)類和后置增強(qiáng)類進(jìn)行注入,并且代理。2.1.5學(xué)生實(shí)踐練習(xí)通過對AOP的理解,完成目標(biāo)對象后置增強(qiáng)。模擬員工在上班期間,網(wǎng)絡(luò)攝像頭監(jiān)控員工行為的案例。員工在上班時(shí)的任何行為都會(huì)被攝像頭捕捉,當(dāng)每個(gè)行為發(fā)生后,系統(tǒng)會(huì)自動(dòng)提示。實(shí)踐時(shí)間:45分鐘2.1.5學(xué)生實(shí)踐練習(xí)在bean包中,創(chuàng)建目標(biāo)對象IEmployee的接口,定義一個(gè)work()方法。在bean包中,創(chuàng)建目標(biāo)對象Employee類,并實(shí)現(xiàn)接口中的方法,在work()方法中輸出一句話“員工在工作中!”。在advice包中,創(chuàng)建一個(gè)Camera(攝像頭)后置增強(qiáng)類,并實(shí)現(xiàn)AfterReturningAdvice接口,在實(shí)現(xiàn)方法中輸出一句話“攝像頭已經(jīng)記錄用戶行為!”。在applicationContext.xml文件中,依次注入目標(biāo)對象、后置增強(qiáng)和代理。在測試類中,獲得employeeBean代理對象,調(diào)用work()方法。執(zhí)行測試,查看輸出結(jié)果。通過“網(wǎng)絡(luò)攝像頭”捕捉
員工的游戲行為實(shí)踐練習(xí)使用正則表達(dá)式方式匹配
切面技術(shù)講解講解時(shí)間:20分鐘實(shí)踐時(shí)間:25分鐘2.2正則表達(dá)式匹配切面:內(nèi)容預(yù)覽2.2.1
使用正則表達(dá)式方式匹配切面可以使用正則表達(dá)式進(jìn)行描述匹配,RegexpMethodPointcutAdvisor是該切面的實(shí)現(xiàn)。例如,使用“buyIpad.*”匹配所有以buyIpad開頭的方法。假設(shè),目標(biāo)對象中有多個(gè)方法,在執(zhí)行中,我們要讓某幾個(gè)方法在執(zhí)行時(shí)才獲得增強(qiáng),那又該如何實(shí)現(xiàn)呢?publicvoidbuyIphone()publicvoidbuyIpadMini()不允許buyIphone方法獲得增強(qiáng)ref屬性的使用2.2.1
使用正則表達(dá)式方式匹配切面Customer.javapublicclassCustomerimplementsICustomer{ publicvoidbuyIphone(){ System.out.println("購買了一臺(tái)iPhoneX"); }
publicvoidbuyIpadMini(){ System.out.println("購買了一臺(tái)iPadmini"); }}增加一個(gè)購買iPhone的方法applicationContext.xml<!--正則表達(dá)式方式匹配切面的切面實(shí)現(xiàn)類--> <beanid="surveyRegexpAdvice"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"p:advice-ref="surveyAfterAdvice"><!--.*代表匹配換行符以外的0~N個(gè)字符--> <propertyname="pattern"value=".*IpadMini.*"></property></bean>定義切面表達(dá)式2.2.1
使用正則表達(dá)式方式匹配切面如果在目標(biāo)對象中添加一個(gè)seeSee方法。在seeSee()和buyIpadMini()方法穿過切面時(shí),獲得后置增強(qiáng),應(yīng)該怎么定義表達(dá)式呢?<!--patterns:匹配多個(gè)表達(dá)式--><propertyname="patterns"><list>
<value>.*IpadMini.*</value> <value>.*see.*</value></list></property>2.2.2學(xué)生實(shí)踐練習(xí)實(shí)踐時(shí)間:25分鐘使用上一節(jié)的案例,結(jié)合正則表達(dá)式匹配切面的方式,對目標(biāo)連接點(diǎn)進(jìn)行攔截。攝像頭發(fā)現(xiàn)員工玩游戲時(shí),網(wǎng)絡(luò)攝像頭記錄員工行為。攝像頭發(fā)現(xiàn)員工在工作時(shí),則不被攝像頭記錄員工行為。2.2.2學(xué)生實(shí)踐練習(xí)在工程中,創(chuàng)建名為Car的類修改IEmployee接口,定義qqGame()、lolGame()方法。修改Employee類,實(shí)現(xiàn)接口中的方法。
在applicationContext.xml,添加正則表達(dá)式切面,對帶有“Game”的方法名進(jìn)行文件中攔截。
在applicationContext.xml文件中,修改代理對象p:interceptorNames的織入。
在測試類中,調(diào)用work、qqGame和lolGame方法,查看控制臺(tái)的正確輸出。增設(shè)一個(gè)“攝像頭”對員工
行為“預(yù)警提示”實(shí)踐練習(xí)使用AOP完成前置增強(qiáng)技術(shù)講解講解時(shí)間:20分鐘實(shí)踐時(shí)間:25分鐘2.3前置增強(qiáng):內(nèi)容預(yù)覽2.3.1使用AOP完成前置增強(qiáng)使用AOP完成前置增強(qiáng)案例說明在顧客購買前先提供身份證信息,如果為武漢市居民身份證,則在購買前先送一張100元代金券,并提示客戶。實(shí)現(xiàn)步驟修改buyIpadMini方法,為其添加一個(gè)參數(shù),接收顧客的證件號(hào)碼。在工程中創(chuàng)建前置通知。在applicationContext.xml文件中注入前置通知。在控制臺(tái)輸出結(jié)果。2.3.1使用AOP完成前置增強(qiáng)ICustomer.javapublicinterfaceICustomer{ publicvoidbuyIpadMini(StringcusId);}修改buyIpadMini方法,提供顧客身份證信息BuyBeforeAdvice.javapublicclassBuyBeforeAdviceimplementsMethodBeforeAdvice{publicvoidbefore(Methodmethod,Object[]args,Objectobj) throwsThrowable{ //System.out.println("當(dāng)前正在執(zhí)行"+obj.getClass().getName()+"類。"); //System.out.println("當(dāng)前正在執(zhí)行"+method+"方法。"); //獲得方法的第一個(gè)參數(shù) StringcardId=args[0].toString(); if(cardId.indexOf("420107")==0){ System.out.println("敬愛的顧客,您手持的是武漢市居民身份證,Apple公司將贈(zèng)送您一張100元代金券!"); } }}常見集合屬性,并初始化獲得buyIpadMini方法的參數(shù)1.修改buyIpadMini方法,為其添加一個(gè)參數(shù),接收顧客的證件號(hào)碼。2.在工程中創(chuàng)建前置通知。2.3.1使用AOP完成前置增強(qiáng)applicationContext.xml<!--注入前置增強(qiáng)--><beanid="buyBeforeAdvice"class="com.mstf.advice.BuyBeforeAdvice"/>
<!--修改代理對象配置中p:interceptorNames的織入--><beanid="customerBean"class="org.springframework.aop.framework.ProxyFactoryBean" p:proxyInterfaces="com.mstf.bean.ICustomer"p:target-ref="target" p:interceptorNames="surveyAfterAdvice,buyBeforeAdvice"/>可以添加多個(gè)增強(qiáng)類型TestMain.javapublicclassTestMain{publicstaticvoidmain(String[]args){ ApplicationContextcontext=newClassPathXmlApplicationContext( "applicationContext.xml"); ICustomercus=(ICustomer)context.getBean("customerBean"); cus.buyIpadMini(); System.out.println("---------------------------------"); cus.buyIpadMini(); }}傳遞測試參數(shù),以“420107”開頭表示“湖北省武漢市”編號(hào)3.在applicationContext.xml文件中注入前置通知。并在控制臺(tái)輸出結(jié)果。2.3.2學(xué)生實(shí)踐練習(xí)實(shí)踐時(shí)間:25分鐘使用本章2.2.2小節(jié)的案例,結(jié)合前置增強(qiáng)對目標(biāo)連接點(diǎn)進(jìn)行攔截。在公司增設(shè)了一臺(tái)攝像頭,主要功能是對員工上班行為的預(yù)警,對員工的每一個(gè)行為進(jìn)行警告。2.3.2學(xué)生實(shí)踐練習(xí)在工程中,創(chuàng)建一個(gè)BeforeCamera(前置攝像頭)前
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《市場營銷策劃概述》課件
- 《社區(qū)康復(fù)知識(shí)講座》課件
- 單位管理制度集合大全【員工管理篇】
- 單位管理制度集粹選集【人員管理篇】
- 單位管理制度范文大全人力資源管理篇
- 單位管理制度范例匯編【職員管理】
- 《藥學(xué)專業(yè)知識(shí)(二)》高頻考點(diǎn)
- 《證人與證人證言》課件
- 農(nóng)學(xué)新篇章模板
- 酒店設(shè)施維護(hù)與管理培訓(xùn)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之4:4組織環(huán)境-4.2理解相關(guān)方的需求和期望(雷澤佳編制-2025B0)
- 2024-2025學(xué)年 數(shù)學(xué)二年級(jí)上冊冀教版期末測試卷(含答案)
- 2024年1月遼寧省普通高中學(xué)業(yè)水平合格性考試物理試題(含答案解析)
- 期末測試卷(試題)-2024-2025學(xué)年四年級(jí)上冊數(shù)學(xué)滬教版
- FAF、PAF型電站動(dòng)葉可調(diào)軸流式送風(fēng)機(jī)、一次風(fēng)機(jī)安裝和使用維護(hù)說明書B本(1)
- 南京工程學(xué)院圖書館地源熱泵
- 宮頸癌篩查健康宣講PPT優(yōu)秀課件
- 輔警年度考核登記表
- 小沈陽《新上海灘》經(jīng)典臺(tái)詞
- 建工會(huì)職工之家的申請.doc
- CSFB信令流程(常用)
評(píng)論
0/150
提交評(píng)論