程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> AspectNet功能介紹(一)

AspectNet功能介紹(一)

編輯:關於ASP.NET

AspectNet是一個基於.Net Framework的方面編制器,它同時能實現靜態編織和動態編織,是bobmazelin個人的研究性項目,現仍然處於開發階段,有關AOP概念的介紹請參考:www.aspectJ.org以及IBM的專題.

這是AspectNet功能介紹的第一篇,我主要介紹AspectNet在靜態編織方面的基本結構.

AspectNet在很大程度上參考了aspectJ,它通過MSIL代碼來實現靜態編織,由此AspectNet不需要源代碼,同時它也可以混合編織C#和VB.Net(理論上VC++.Net也可以)產生的動態鏈接庫.

AspectNet由Aspect組成,每個Aspect都可以聲明若干個pointcut,storage以及advice.

1.pointcut的概念和aspectJ基本一致,它捕獲需要被織入的代碼點;

2.storage是ApsectNet特有的概念,它和pointcut類似,捕獲需要織入到pointcut的代碼;

3.advice的概念和aspectJ基本一致,但它不需要寫任何C#或其他代碼,它連接了pointcut和storage,使他們形成了多對多的關系映射.

下面給一個簡單的例子來說明這3個概念:

namespace Bob.Mazelin
{
  aspect Demo
  {
    pointcut AddDemo1():call(public void Mazelin.AspectNet.TestProject.TestClass.Demo1());
    before():AddDemo1():PrintBefore();

    after():AddDemo1():PrintAfter();

    storage PrintBefore():call(public void Mazelin.AspectNet.TestProject.PrintClass.PrintBefore());
    storage PrintAfter():call(public void Mazelin.AspectNet.TestProject.PrintClass.PrintAfter());  
  }
}

其中AddDemo1是pointcut的名字,它捕獲了Demo1方法,該方法沒有返回值,也沒有參數,其被全稱為Mazelin.AspectNet.TestProject.TestClass類聲明.call關鍵字表明了捕獲點為調用該方法的程序點;

PrintBefore和PrintAfter是兩個storage類型,它們分別捕獲了PrintBefore和PrintAfter方法,其解釋意義和pointcut類似;

before和after是advice,它連接了AddDemo1和PrintBefore,PrintAfter,使PrintBefore和PrintAfter分別在AddDemo1調用前和後被調用.

當需要織入的DLL和aspect文件一起運行後,會產生新的織入代碼後的DLL.這樣的織入方式基本不影響代碼的性能,和手工編寫代碼類似,和動態編織的方式相比性能好,但缺乏靈活性.

今天就先到這裡,下次我會介紹AspectNet中call和execution pointcut的使用,還請對AOP由興趣的朋友多提寶貴意見.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved