AspectNet是一個基於.Net Framework的方面編制器,它同時能實現靜態編織和動態編織,是bobmazelin個人的研究性項目,現仍然處於開發階段,有關AOP概念的介紹請參考:www.aspectJ.org以及IBM的專題.
在上一篇中我介紹了AspectNet的基本結構,從這篇開始我會具體介紹AspectNet在靜態編織方面的功能.這次我給大家介紹call和execution兩個pointcut.
在上篇中我提過pointcut捕獲了需要織入的代碼點,在AspectNet中存在著多種捕獲這種代碼點的方式,call和execution是其中比較基礎的兩種.
1.call pointcut: 捕獲了調用某些方法的代碼點;
2.execution pointcut:捕獲了執行某些方法的代碼點.
它們非常相似,我在下文會通過一個小例子來展示它們之間的區別.
在給出例子之前,我先說明一下它們的方法模式:
修飾符 返回值類型 [方法類型.]方法名稱(參數類型列表)
1.修飾符是public, protected,private,sealed,static等,它們支持!以及並操作(比如: !private static);
2.返回值類型就是方法的返回值類型,它支持void,*, &&, ||, !,+操作符.void就是沒有返回值;*是通配符,單獨的*代表任意類型,也可以部分通配,比如:System.*,Customer*.Order*等等;&&, ||, !可以組合不同的類型;+是子類操作符,代表包括其所有子類,比如:System.Object+,就代表了所有的類;
3.方法類型描述了方法聲明了類型,它和返回值類型的模式類似;注:在AspectNet中它不能被忽略;
4.方法名稱只支持*和new操作符,new代表類的構造函數;
5.參數類型列表:通過,來分割參數類型,它支持..操作符來表示任意多了參數,比如:System.Int,..,string就表述方法的第一個參數和最後一個參數的類型,中間不限制參數的個數和類型.
注:上面對AspectNet的方法模式的描述並不全面.
理論講完了,來點實際的,由於還沒有到參數的傳遞階段,我選擇了最為簡單的log為實例,等到介紹參數時再給出業務相對復雜的例子,這個例子主要說明兩個問題,第一: 通過+來捕獲子類代碼點;第二,call和execution的區別.