版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于SSM框架的軟件架構(gòu)設(shè)計(jì)實(shí)戰(zhàn)Software
Architecture
Design
Practice
Based
on
SSM
Framework第6章Spring的AOP機(jī)制1234面向切面編程的概念Spring
AOP——編程式Spring
AOP——聲明式Spring
AOP——AspectJ面向切面編程的概念面向切面編程的概念問題的提出面向切面編程的概念問題違反“開放封閉”原則程序員無法專注于業(yè)務(wù)邏輯解決思路將這類與業(yè)務(wù)邏輯無關(guān)的重復(fù)代碼抽取出來,放到獨(dú)立模塊中面向切面編程的概念面向切面編程(AOP,AspectOrientedProgramming)將分散在各個(gè)業(yè)務(wù)邏輯中的相同代碼,通過“橫向切割”的方式抽取到獨(dú)立模塊中一方面增強(qiáng)代碼復(fù)用性,另一方面使編程人員專注于業(yè)務(wù)邏輯面向切面編程的概念橫切性關(guān)注點(diǎn)(cross-cuttingconcerns):在一個(gè)業(yè)務(wù)流程中插入與業(yè)務(wù)邏輯無關(guān)的系統(tǒng)服務(wù)邏輯,這樣的邏輯稱為橫切關(guān)注點(diǎn)連接點(diǎn)(jointpoint):程序執(zhí)行過程中明確的點(diǎn),如方法調(diào)用或拋出特定異常增強(qiáng)/通知(advice):攔截到連接點(diǎn)之后所要做的事情切入點(diǎn)(pointcut):一個(gè)增強(qiáng)將被引發(fā)的一類連接點(diǎn)的統(tǒng)稱切面/方面(aspect):橫切性關(guān)注點(diǎn)的抽象,是切入點(diǎn)和增強(qiáng)的結(jié)合織入(weaving):將增強(qiáng)應(yīng)用到連接點(diǎn)的過程面向切面編程的概念SpringAOP基于動(dòng)態(tài)代理技術(shù),把增強(qiáng)、切點(diǎn)、切面等抽象成類,便于應(yīng)用,Spring
AOP既支持JDK動(dòng)態(tài)代理,也支持CGLib動(dòng)態(tài)代理如果目標(biāo)對象實(shí)現(xiàn)了接口,默認(rèn)采用JDK動(dòng)態(tài)代理也可以強(qiáng)制使用CGLib動(dòng)態(tài)代理如果沒有實(shí)現(xiàn)接口,則使用CGLib動(dòng)態(tài)代理SprinG
AOP——
編程式Spring
AOP——編程式(增強(qiáng))SpringAOP將增強(qiáng)代碼織入連接點(diǎn)的原理:掃描所有類,發(fā)現(xiàn)有實(shí)現(xiàn)增強(qiáng)接口的類則將其中的增強(qiáng)方法織入Spring
AOP——編程式(增強(qiáng))Spring
AOP中增強(qiáng)的類型前置增強(qiáng):在目標(biāo)方法調(diào)用前執(zhí)行后置增強(qiáng):在目標(biāo)方法調(diào)用后執(zhí)行異常增強(qiáng):在目標(biāo)方法調(diào)用發(fā)生異常后執(zhí)行環(huán)繞增強(qiáng):在目標(biāo)方法調(diào)用前和調(diào)用后執(zhí)行引介增強(qiáng):為目標(biāo)類創(chuàng)建實(shí)現(xiàn)新接口的代理Spring
AOP——編程式(增強(qiáng))Spring
AOP——編程式(增強(qiáng))定義增強(qiáng)類,實(shí)現(xiàn)特定增強(qiáng)接口在增強(qiáng)類中重寫特定方法,實(shí)現(xiàn)增強(qiáng)操作使用時(shí)創(chuàng)建代理工廠(ProxyFactory)調(diào)用代理工廠的setTarget()方法設(shè)置目標(biāo)對象,傳入目標(biāo)對象作為參數(shù)調(diào)用代理工廠的addAdvice()方法添加增強(qiáng),傳入增強(qiáng)類實(shí)例作為參數(shù)調(diào)用ProxyFactory的getProxy()方法獲取代理對象Spring
AOP——編程式(增強(qiáng))前置增強(qiáng)類method表示連接點(diǎn)方法,其類型為Methodargs為連接點(diǎn)方法的參數(shù),它是一個(gè)Object數(shù)組target為目標(biāo)對象。Spring
AOP——編程式(增強(qiáng))后置增強(qiáng)類returnValue:連接點(diǎn)方法的返回值method:連接點(diǎn)方法args:連接點(diǎn)方法的參數(shù)target:目標(biāo)對象Spring
AOP——編程式(增強(qiáng))后置增強(qiáng)類Spring
AOP——編程式(增強(qiáng))異常增強(qiáng)類method:連接點(diǎn)方法args:連接點(diǎn)方法的參數(shù)target:目標(biāo)對象ex:連接點(diǎn)方法拋出的異常Spring
AOP——編程式(增強(qiáng))異常增強(qiáng)類Spring
AOP——編程式(增強(qiáng))環(huán)繞增強(qiáng)類Spring
AOP——編程式(增強(qiáng))引介增強(qiáng)類讓目標(biāo)對象實(shí)現(xiàn)一個(gè)它原本沒有實(shí)現(xiàn)的接口繼承DelegatingIntroductionInteceptor類Spring
AOP——編程式(切面)增強(qiáng)提供了一部分織入的位置信息,即方法的前面、后面等。但沒有指定織入到哪些類的哪些方法中哪些類的哪些方法,這種信息使用切入點(diǎn)描述切面=切入點(diǎn)+增強(qiáng)Spring
AOP——編程式(切面)Spring
AOP——編程式(切面)靜態(tài)方法名匹配切面:通過類過濾和方法名匹配定義切入點(diǎn)實(shí)現(xiàn)步驟定義切面類,繼承StaticMethodMatcherPointcutAdvisor類重寫matches()方法(在MethodMatcher接口中定義)Spring
AOP——編程式(切面)靜態(tài)方法名匹配切面method:連接點(diǎn)方法,其類型是MethodtargetClass:目標(biāo)對象的類型,其類型為Class<?>,表示任意類類型Spring
AOP——編程式(切面)靜態(tài)方法名匹配切面Spring
AOP——編程式(切面)靜態(tài)正則表達(dá)式方法名匹配切面:通過正則表達(dá)式匹配方法名定義切入點(diǎn)實(shí)現(xiàn)類:RegexpMethodPointcutAdvisor,此類所實(shí)現(xiàn)的功能已經(jīng)足夠,不用再定義子類Spring
AOP——編程式(切面)靜態(tài)正則表達(dá)式方法名匹配切面Spring
AOP——編程式(切面)動(dòng)態(tài)切面編程時(shí)就確定好的切面稱為靜態(tài)切面,相應(yīng)的切點(diǎn)稱為靜態(tài)切點(diǎn),有時(shí)不僅需要依靠方法名確定切點(diǎn),還要根據(jù)方法參數(shù)確定切點(diǎn),在運(yùn)行期確定的切點(diǎn),稱為動(dòng)態(tài)切點(diǎn),相應(yīng)的切面稱為動(dòng)態(tài)切面。Spring
AOP——編程式(切面)動(dòng)態(tài)切面:實(shí)現(xiàn)步驟定義一個(gè)切點(diǎn)類,繼承DynamicMethodMatcherPointcut類重寫matches()方法Spring
AOP——編程式(切面)動(dòng)態(tài)切面method:連接點(diǎn)方法targetClass:目標(biāo)對象args:連接點(diǎn)方法的入?yún)?,其類型為Object類型的可變參數(shù)Spring
AOP——編程式(切面)動(dòng)態(tài)切面Spring
AOP——編程式(切面)引介切面由于引介增強(qiáng)只能作用于類,而不能作用于方法,因此引介切面不需要指定切入點(diǎn)使用Spring提供的類DefaultIntroductionAdvisorSPRING
AOP——
聲明式Spring
AOP——聲明式Spring借助IoC,把各種對象(代理工廠、目標(biāo)對象、代理對象、切面、增強(qiáng)等)的創(chuàng)建交給IoC容器管理。使用時(shí),直接從容器中獲取代理對象使用。其核心是ProxyFactoryBean類,它是FactoryBean的實(shí)現(xiàn)類,負(fù)責(zé)為其它Bean創(chuàng)建代理對象。Spring
AOP——聲明式配置文件編寫步驟聲明增強(qiáng)或切面Bean聲明目標(biāo)對象Bean聲明代理對象Bean,class屬性為ProxyFactoryBean注入代理對象Bean的interfaces屬性注入代理對象Bean的target屬性(目標(biāo)對象)注入代理對象Bean的interceptorNames屬性(增強(qiáng)或切面)根據(jù)具體問題注入代理對象Bean的proxyTargetClass屬性SPRING
AOP——
AspectJSpring
AOP——AspectJSpringAOP:運(yùn)行期織入切入點(diǎn)的表達(dá)不夠豐富(如:無法切入到具有特定注解的方法內(nèi))無法織入到static方法使用配置式時(shí),目標(biāo)對象只能是Spring容器內(nèi)的BeanSpring
AOP——AspectJAspectJ的優(yōu)勢:無論是通過注解和配置文件,配置AspectJ都更直觀、緊湊,配置過程相對于SpringAOP更友好。AspectJ支持編譯期織入,而SpringAOP只支持運(yùn)行期織入,增強(qiáng)代碼織入的位置受限,如無法織入到具有特定注解的方法上。AspectJ定義了一套完整的切入點(diǎn)表達(dá)式,切入點(diǎn)的定義更豐富、更靈活。AspectJ定義切面不需要繼承框架提供的類或?qū)崿F(xiàn)框架提供的接口,侵入性更小。Spring
AOP——AspectJ(基于注解)定義切面類使用注解在切面類內(nèi)定義切入點(diǎn)和增強(qiáng)方法使用時(shí)創(chuàng)建代理工廠(AspectJProxyFactory類的實(shí)例)調(diào)用代理工廠的setTarget()方法設(shè)置目標(biāo)對象調(diào)用代理工廠的addAspect()方法添加切面調(diào)用代理工廠的getProxy()方法獲得代理對象Spring
AOP——AspectJ(基于注解)AspectJ注解@Aspect:標(biāo)記一個(gè)切面類@Pointcut:標(biāo)記切點(diǎn)@Before:標(biāo)記前置增強(qiáng)方法@AfterReturning:標(biāo)記后置增強(qiáng)方法@After:標(biāo)記最終增強(qiáng)方法@AfterThrowing:標(biāo)記異常增強(qiáng)方法@Around:標(biāo)記環(huán)繞增強(qiáng)方法@DeclareParents:標(biāo)記引介增強(qiáng)Spring
AOP——AspectJ(基于注解)切入點(diǎn)表達(dá)式=函數(shù)(關(guān)鍵字)+參數(shù)函數(shù)共有4類9個(gè)方法切入點(diǎn)函數(shù)方法入?yún)⑶腥朦c(diǎn)函數(shù)目標(biāo)類切入點(diǎn)函數(shù)代理類切入點(diǎn)函數(shù)類別函數(shù)參數(shù)說明方法切入點(diǎn)函數(shù)execution()方法名模式串匹配參數(shù)指明的所有方法@annotation()方法注解名匹配標(biāo)注了參數(shù)指明的注解的方法方法入?yún)⑶腥朦c(diǎn)函數(shù)args()類名匹配帶有參數(shù)指明的入?yún)⒌姆椒ˊargs()類注解名匹配入?yún)?biāo)注了參數(shù)指明的注解的方法目標(biāo)類切入點(diǎn)函數(shù)within()類名模式串匹配參數(shù)指明的類內(nèi)的所有方法target()類名匹配參數(shù)指明的類(接口)及其子類(實(shí)現(xiàn)類)內(nèi)的所有方法@within()類注解名匹配標(biāo)注了參數(shù)指明的注解的類(接口)及其子類(實(shí)現(xiàn)類)中的所有方法@target()類注解名匹配標(biāo)注了參數(shù)指明的注解的類中的所有方法代理類切入點(diǎn)函數(shù)this()類名匹配參數(shù)指定的目標(biāo)類及其子類內(nèi)的方法Spring
AOP——AspectJ(基于注解)通配符含義*匹配任意字符,但只能匹配上下文中的一個(gè)元素..匹配任意字符,可以匹配上下文中的多個(gè)元素,但在表示類時(shí),必須與*聯(lián)合使用,表示入?yún)r(shí)單獨(dú)使用+表示匹配指定類的所有子類或指定接口的所有實(shí)現(xiàn)類,必須跟在類名或接口名后面Spring
AOP——AspectJ(基于注解)邏輯運(yùn)算符配置文件中的寫法含義&&and與||or或!not非例:@Before("anyMethod()&&args(java.lang.String)")表示同時(shí)滿足兩個(gè)表達(dá)式所定義的切入點(diǎn)Spring
AOP——AspectJ(基于注解)Spring
AOP——AspectJ(基于XML)將切面、切入
溫馨提示
- 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ū)普通高考適應(yīng)性檢測分學(xué)科第二次模擬檢測語文試題【含答案詳解】
- 2026年劇本殺運(yùn)營公司企業(yè)發(fā)展戰(zhàn)略規(guī)劃管理制度
- (一模)揚(yáng)州市2026屆高三模擬調(diào)研測試政治試卷(含答案解析)
- 北京市昌平區(qū)2025-2026學(xué)年高一上學(xué)期期末語文試卷(含答案)
- 2025 小學(xué)五年級(jí)道德與法治法律知識(shí)生活化應(yīng)用課件
- 2026年及未來5年中國海岸帶修復(fù)行業(yè)市場深度研究及發(fā)展趨勢預(yù)測報(bào)告
- 企業(yè)服務(wù)類采購制度
- 機(jī)器人關(guān)節(jié)伺服驅(qū)動(dòng)技術(shù)
- 兩票三制獎(jiǎng)罰制度
- 中國司法大數(shù)據(jù)研究院2026年招聘備考題庫及1套參考答案詳解
- 國家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 4-10-01-02 育嬰員 人社廳發(fā)201947號(hào)
- BCG-并購后整合培訓(xùn)材料-201410
- 招標(biāo)代理機(jī)構(gòu)入圍 投標(biāo)方案(技術(shù)方案)
- 運(yùn)輸車隊(duì)年終總結(jié)報(bào)告
- 房屋損壞糾紛鑒定報(bào)告
- 精益生產(chǎn)方式-LEAN-PRODUCTION
- 頸動(dòng)脈外膜剝脫術(shù)
- 養(yǎng)老設(shè)施建筑設(shè)計(jì)規(guī)范
- Starter-軟件簡易使用手冊
- RFJ01-2008 人民防空工程防護(hù)設(shè)備選用圖集
- GB/T 27818-2011化學(xué)品皮膚吸收體外試驗(yàn)方法
評論
0/150
提交評論