原創|其它|編輯:郝浩|2009-11-18 10:30:44.000|閱讀 915 次
概述:上篇我們簡單的了解了AOP的應用場景,知道AOP編程的重要性。這篇我們先看一段代碼,來開始今天的學習。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
上篇我們簡單的了解了的應用場景,知道編程的重要性。這篇我們先看一段代碼,來開始今天的學習。
回顧與上篇類似的代碼:SecurityService類的IsPass判斷用戶名為“admin”則有權限保存數據。OrderService為保存數據的類,實現IOrderService接口。
實現部分
客戶端部分:
輸出: 保存:1
通過上篇的學習,我們知道,什么是——面向切面的編程。在(面向切面的編程)中,我們編寫程序時,首先思考要對程序中哪些方法進行攔截,攔截到這些方法后又要做哪些業務處理。這些關注過程,我們稱之為:橫切性關注點。由“橫切性關注點”引申出以下概念:
Aspect(切面):指橫切性關注點的抽象即為切面,它與類相似,只是兩者的關注點不一樣,類是對物體特征的抽象,而切面是橫切性關注點的抽象。程序里的切面就是AroundAdvise類的實現部分。
joinpoint(連接點):所謂連接點是指那些被攔截到的點。在中,連接點指的是方法,因為只支持方法類型的連接點,實際上joinpoint(連接點)還可以是字段或類構造器。程序里的連接點就是攔截到的方法,如OrderService類的Save方法。
Pointcut(切入點):所謂切入點是指我們要對那些joinpoint(連接點)進行攔截的定義。程序里沒有使用invocation.Method來判斷攔截哪些方式,而Pointcut(切入點)就是對所有方法進行攔截。
Advice(通知):所謂通知是指攔截到joinpoint(連接點)之后所要做的事情就是通知.通知分為前置通知,后置通知,異常通知,環繞通知。AroundAdvise繼承AopAlliance.Intercept.IMethodInterceptor 接口,程序里使用的是環繞通知。
Target(目標對象):代理的目標對象。程序里的目標對象就是OrderService類,我們通過
ProxyFactory factory = new ProxyFactory(new OrderService() { UserName = "admin" });
這句代碼確定了目標對象是OrderService。
代理(proxy):由框架在將通知應用于目標對象后創建的對象。程序里通過GetProxy()方法創建出的代理對象。
Weave(織入):指將切面(aspect)應用到目標對象(target)對象并導致代理(proxy)對象創建的過程稱為織入。正如程序里所應用的,OrderService類不具備判斷權限的功能,我們將判斷權限的功能——SecurityService類的IsPass方法應用到目標對象的過程。
Introduction(引入):在不修改類代碼的前提下,Introduction(引入):可以在運行期為類動態地添加一些方法或字段。程序里在沒有修改OrderService類,而是在運行期把判斷權限的功能通過ProxyFactory的AddAdvice方法動態的增加進去。
這些術語不屬于,而屬于整個編程。所謂,我的理解就是應該是這樣一個過程,首先需要定義一個切面,這個切面是一個類,里面的方法就是關注點(也是通知),或者說里面的方法就是用來在執行目標對象方法時需要執行的前置通知,后置通知,異常通知,最終通知,環繞通知等等。有了切面和通知,要應用到目標對象,就需要定義這些通知的切入點,換句話說就是需要對哪些方法進行攔截,而這些被攔截的方法就是連接點,所謂連接點也就是在動態執行過程,被織入切面的方法(至少在中只能對方法進行攔截)。因此,在動態過程中通知的執行就屬于織入過程,而被織入這些通知的對象就是目標對象了。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園