随笔 - 26  文章 - 0  评论 - 177 

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由兴趣的朋友多提宝贵意见.

附:很对不起大家,现阶段ApsectNet还不提供下载.

posted on 2007-06-29 14:15 bobmazelin 阅读(2052) 评论(9)  编辑 收藏 网摘 所属分类: AOP

  回复  引用  查看    
2007-06-29 17:30 | 随风流月      
编织?编译?
  回复  引用    
2007-06-29 17:43 | bangbang[未注册用户]
呵呵。AOP的东西,要关注下了。
  回复  引用  查看    
2007-06-29 17:43 | flyingchen      
恩,有前途,支持你!!!
  回复  引用  查看    
2007-06-29 17:46 | bobmazelin      
@随风流月
是编织,不敢说是编译,怕被人扔砖头啊!

  回复  引用  查看    
2007-06-30 09:53 | 巫云      
哦,我喜欢AOP。
静态织入代码?用antlr了?
介绍一下吧

  回复  引用  查看    
2007-06-30 20:14 | bobmazelin      
◎巫云
antlr?我没有用过,呵呵。
AspectNet的织入实现只是使用IL Emit,暂时没有使用其他工具;代码分析使用了Glod Parse。另外,它的功能我会慢慢在blog上发布,感谢大家关注和耐心!

  回复  引用    
2007-07-01 22:05 | RicCC[未注册用户]
精神支持
  回复  引用  查看    
2007-07-02 09:20 | bobmazelin      
@RicCC
感谢你的精神支持....^_^

  回复  引用  查看    
2007-09-15 08:58 | 冰戈      
静态横切工具postsharp不错,建议看看



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 800149




相关文章:

相关链接: