版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、什么是AOPAOP為Aspect Oriented Programming的縮寫,意為:面向切面編程(也叫面向方面),可以通過預編譯方式和運行期動態(tài)代理實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加 功能的一種技術(shù)。AOP實際是GoF設計模式的延續(xù),設計模式孜孜不倦追求的是調(diào)用者和被 調(diào)用者之間的解耦,AOP可以說也是這種目標的一種實現(xiàn)。主要的功能是:日志記錄,性能統(tǒng)計,安全控制,事務處理,異常處理等等。主要的意圖是:將日志記錄,性能統(tǒng)計,安全控制,事務處理,異常處理等代碼從業(yè)務 邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨立到非指導業(yè)務邏輯 的方法中,進而改變這些行為的時候不
2、影響業(yè)務邏輯的代碼。可以通過預編譯方式和運行期動態(tài)代理實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加功能的一種技術(shù)。 AOP實際是GoF設計模式的延續(xù),設計模式孜孜不倦追求的是調(diào)用者 和被調(diào)用者之間的解耦,AOF可以說也是這種目標的一種實現(xiàn)。在Spring中提供了面向切面編程的豐富支持,允許通過分離應用的業(yè)務邏輯與系統(tǒng)級 服務(例 如審計(auditing )和事務(transaction )管理)進行內(nèi)聚性的開發(fā)。應用對象 只實現(xiàn)它們應該做的一一完成業(yè)務邏輯一一僅此而已。它們并不負責(甚至是意識)其它的系統(tǒng)級關(guān)注點,例如日志或事務支持。切面(Aspect)切面是你要實現(xiàn)的交叉功能。它是應用系統(tǒng)
3、模塊化的一個切面或領域。切面的最常見(雖然簡單)例子是日志記錄。日志記錄在系統(tǒng)中到處需要用到,利用繼承來重用日志模塊不適合。然而,你可以創(chuàng)建一個日志記錄切面,并且使用AOF在系統(tǒng)中應用。連接點(Joinpoint )連接點是應用程序執(zhí)行過程中插入切面的地點。這個地點可以是方法調(diào)用,異常拋出, 或者甚至是要修改的字段。切面代碼在這些地方插入到你的應用流程中,添加新的行為。通知(Advice)通知切面的實際實現(xiàn)。它通知應用系統(tǒng)新的行為。在日志例子中,日志通知包含了實現(xiàn) 實際日志功能的代碼,如向日志文件寫日志。通知在連接點插入到應用系統(tǒng)中。切入點(Pointcut )切入點定義了通知應該應用在哪些連
4、接點。通知可以應用到AOP1架支持的任何連接點。當然,你并不希望把所有切面應用到所有可能的連接點上。切入點讓你指定通知應用到什么地方。通常通過指定類名和方法名,或者匹配類名和方法名式樣的正則表達式來指定切 入點。一些AOP框架允許動態(tài)創(chuàng)建切入點,在運行時根據(jù)條件決定是否應用切面,如方法參數(shù)值。弓|入(Introduction)引入允許你為已存在類添加新方法和屬性。例如,你可以創(chuàng)建一個稽查通知來記錄對象的最后修改時間。只要用一個方法 setLastMofified(Date) 以及一個保存這個狀態(tài)的變量。 可以在不改變已存在類的情況下將這個引入,給他們新的行為和狀態(tài)。目標對象(Target)目標
5、對象是被通知對象。它既可以是你編寫的類也可以是你要添加制定行為的第三方類。如果沒有 AOP這個類就必須要包含它的主要邏輯以及其他交叉業(yè)務邏輯。有了AOP目標對象就可以全身心地關(guān)注主要業(yè)務,忘記應用其上的通知。代理(Proxy )代理是將通知應用到目標對象后創(chuàng)建的對象。對于客戶對象來說,目標對象(應用AOP之前的對象)和代理對象(應用AOP之后的對象)是一樣的。也就是,應用系統(tǒng)的其他部分不用為了支持代理對象而改變??椚耄╓eavin g)織入是將切面應用到目標對象從而創(chuàng)建一個新的代理對象的過程。切面在指定接入點被織入到目標對象中。二.幾個重要接口用于找到用于通知的相關(guān)的類型和方法1. View
6、Code2. public interface IPointcut3.3. 5.4. ITypeFilter TypeFilter get ; 7.5. IMethodMatcher MethodMatcher get ; 9.6. 用于匹配相關(guān)類型1. View Code2. public interface ITypeFilter3.3. 5.4. bool Matches(Type type);7.5. 9.6. public interface IMethodMatcher11.12. 13.14. bool IsRuntime get ; 15.15. bool Matches(Me
7、thodInfo method, Type targetType);17.16. bool Matches(MethodInfo method, Type targetType,object args)19.17. Matches(MethodI nfo, Type) 方法用來測試這個切入點是否匹配目標類的指定方法。這將在AOP代理被創(chuàng)建的時候執(zhí)行,這樣可以避免在每次方法調(diào)用的時候都執(zhí)行。如果兩個參數(shù)的matches方法對于一個給定的方法返回 true,并且IMethodMatcher接口的IsRuntime 方法也返回true,那么有三個參數(shù)的 matches方法將在每個方法調(diào)用時被調(diào)用 .
8、這使得切入 點在通知將被執(zhí)行前可以查看傳入到方法的參數(shù)。絕大多數(shù)的IMethodMatcher接口是static 的,這也就意味著它們的IsRuntime屬性返回false.在這種情況下,有三個參數(shù)的 Matches方法將永遠不會被調(diào)用.三.通知3.1通知生命周期3.2通知類型一、攔截環(huán)繞通知(around advice) : Spring.NET中最基本的通知類型是攔截環(huán)繞通知(interceptionaround advice ),即方法攔截器。攔截環(huán)繞通知繼承IMethodlnterceptor接口。注意其中IMethodl nvocati on .Proceed。方法的調(diào)用。該方法會依
9、次調(diào)用攔截器鏈上的其它攔截器。大部分攔截器都需要調(diào)用這個方法并返回它的返回值。當然,也可以不調(diào)用Proceed方法,而返回一個其它值或拋出一個異常,但一般不太會這么做。二、 前置通知(before advise):是在 IMethodInterceptorProceed。方法調(diào)用前的通 知。繼承自 IMethodBeforeAdvice 接口。三、 異常通知(throws advise):是在IMethodInterceptorProceed。方法調(diào)用時發(fā)生異常的通知。繼承自 IthrowsAdvice 接口。IthrowsAdvice接口沒有定義任何方法:它是一個標識接口(按:之所以用標識接
10、口,原因有二:1、在通知方法中,只有最后一個參數(shù)是必須的。如果聲明為接口的方法,參數(shù)列表就被固定了。2、如果第一個原因可以用重載的接口方法解決,那么這個原因就是使用標識接口的充分原因了:實現(xiàn)此接口的類必須聲明一或多個通知方法,接口方法做不到這一點),用以表明實現(xiàn)它的類聲明了一或多個強類型的異常通知方法。四、 后置通知(after returning advise):是在 IMethodInterceptorProceed。方法調(diào)用后的通知。繼承自lAfterReturni ngAdvice 接口。后置通知對切入點的執(zhí)行沒有影響, 如果通知拋出異常,就會沿攔截器鏈向上拋出,從而中斷攔截器鏈的繼續(xù)
11、執(zhí)行。3.2.1 InterceptionAround Advice (環(huán)繞攔截通知,后面的講解以環(huán)繞攔截通知為例子)方法攔截器接口1. View Code2. public interface IMethodInterceptor : IInterceptor3.3. 5.7.8. 模擬環(huán)繞攔截通知注意 IMethodl nvocati on的 Proceed四切入點操作4.1靜態(tài)切入點4.1.1 ProxyFactoryObject顯式創(chuàng)建1. AOP配置文件2. object id =UserValidateTarget ervciesm pl.UserValidate, Servcie
12、s3.3. object id = RoundInterceptor ervciesn terceptor.Roundlnterceptor, Servcies5.4. 7.5. 方法,proceed方法返回方法的返回值AOP代 理type =Stephen.SpringNet.AOPSample.Sv/objecttype =Stephen.SpringNet.AOPSample.Stype =Spring.Aop.Framework.ProxyFavalue =Stephen.SpringNet.AOPSa1. View Code2.publicclass Debuglnterceptor
13、 : IMethodlnterceptor3.4.5.publicobject lnvoke(IMethodlnvocation invocation)6.7.8.Console.WriteLine(Before: invocation=0,invocation);9.10.object rval = invocation.Proceed();11.12.Console.WriteLine(Invocation returned);13.14.return rval;1.vpropertyname=targetref =UserValidateTarget/
14、12.13.vpropertyname=interceptorNames7. Roundinterceptor1.22.不過由于顯式的創(chuàng)建 AOP在要創(chuàng)建多個代理的時候需要重復的配置因此Spring提供了自動代理4.1.2 ObjectNameAutoProxyCreator對象名稱自動切入點可以用特定的文本值或通配符匹配目標對象的名稱,并為滿足條件的目標對象創(chuàng)建 AOP代理。該類支持模式匹配字符串, 如如: * name,n ame*,” * name* “和精確文本如n ame。 我們可以通過下面這個簡單的例子了解一下自動代理的功能。1.AOP配置文
15、件2.3.vproperty name=ObjectNames4.5.*Validate6.7.8.vproperty name=InterceptorNamesvalue= Roundinterceptor9.1.測試方法2.TestMethod3.public void ObjectNameAutoProxyCreatorMethodTest()4.5.var context = ContextRegistry.GetContext();6.IDictionary validates = context.GetObjectsOfType(typeof(IValidateService);7
16、.foreach (DictionaryEntry validatein validates)8. null );9. (IValidateService) validate.Value).Validate(10.10. 11. 執(zhí)行結(jié)果ObjectNameAutoProxyCreatorMethodTest : PassedMethod:Validate開始執(zhí)行Method:Validate執(zhí)行完畢4.1.3 SdkRegularExpressio nM ethodPoi ntcut通過正則表達式來匹配需要執(zhí)行的類或方法1.AOP配置2.vobject id =ValidatePointCu
17、ttype =Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop3.vproperty name=Patternvalue = UserValidate.Advance*v/proper4.5.6.ty7.pattern 的屬性 UserValidate.Advanee*表示匹配 UserValidate 類中的以Advanee開頭的方法4.1.4 DefaultAdvisorAutoProxyCreator+RegularExpressi onM ethodPo in tcutAdvisor創(chuàng)建正則表達式 AOP
18、1. AOP配置2. vobjectid =ProxyCreator type = Spring.Aop.Framework.AutoProxy.DefaultAdvisorAutoProxyCreator, Spring.Aop/ vobject id =ValidateRegularExpressionPointCuttype =Spring.Aop.Support.RegularExpressionMethodPointcutAdvisor, Spring.Aop3. vpropertyname=adviceref =RoundInterceptor /4. vpropertyname=patterns 5. vlist6.vvalue UserValidate.Advance*v/value.....5特性 Aopv/list可以通過Attribute類來實現(xiàn)AOPAttri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)村西瓜種植扶持項目合同范本3篇
- 不做教書匠心得體會15篇
- 2025年度汽車租賃服務合同范本二零二五年度版11篇
- 利差返還型人壽保險合同范本
- 石家莊房屋租賃合同范本
- 二零二五年度商業(yè)樓宇外墻清洗承包合同4篇
- 滑雪場租賃合同冬季版
- 煤炭分銷居間服務合同樣本
- 足療店裝修監(jiān)理合同樣本
- 婚紗店裝修補貼合同
- 第八章《運動和力》達標測試卷(含答案)2024-2025學年度人教版物理八年級下冊
- 民辦幼兒園務工作計劃
- 2025年華僑港澳臺生聯(lián)招考試高考地理試卷試題(含答案詳解)
- (正式版)JBT 5300-2024 工業(yè)用閥門材料 選用指南
- GB/T 13813-2023煤礦用金屬材料摩擦火花安全性試驗方法和判定規(guī)則
- 日語專八分類詞匯
- GB/T 33084-2016大型合金結(jié)構(gòu)鋼鍛件技術(shù)條件
- 高考英語課外積累:Hello,China《你好中國》1-20詞塊摘錄課件
- 航道整治課程設計
- 抖音品牌視覺識別手冊
- 虛位移原理PPT
評論
0/150
提交評論