《AspectC++ Language Reference》Chapter 8

第八章 Advice顺序

8.1 Aspect的优先级

Aspect C++为定义aspect的优先级提供了非常弹性化的机制。如果有多个aspect影响同一个join point,则由优先级决定advice代码执行的顺序。Aspect C++中,优先级是join point的一个属性。也就是说,两个aspect的优先级关系在系统不同的部分会有区别。编译器检查下面的条件,以决定aspect的优先级:

顺序的声明:如果程序员给出了顺序声明,那么编译器会遵循该声明,如果编译器发现优先级图中存在回路,那么编译器会提示编译器错误并中止。顺序的声明语法如下:

advice pointcut-expr : order( high, …low )

order的参数列表中至少要包含两个元素。每个元素是一个pointcut表达式,描述了一个aspect。左边的优先级高于右边的。例如clip_image002,一位了A1的优先级高于A3、A4,A2的优先级也高于A3、A4。这个例子中没有定义A1和A2之间的优先关系,也没有给出A3、A4的优先关系。当然,参数列表中的pointcut表达式也可以包含命名的pointcut,甚至是纯虚pointcut。

继承关系:如果没有给出顺序的声明,并且一个aspect有基类aspect,那么派生类aspect的优先级高于基类aspect。

8.2 Advice的优先级

davice的优先级通过非常简单的机制来决定:

l 如果两个advice来自不同的aspect,并且这两个aspect之间存在优先级关系,那么advice的优先级关系和aspect的相同;

l 如果两个advice来自同一个aspect,那么先声明的advice的优先级高于后声明的。

8.3 Advice优先级的影响

只有advice优先级对生成的代码有影响。此影响依赖于join point的类型.

Class Join Point

作用在class join point上的advice可以扩展属性列表或基类列表。如果一个advice比另一个advice的优先级高,那么就会先处理这个advice。例如,如果一个用于引入新基类的advice具有高优先级,那么在基类列表中,他引入的基类就会出现在低优先级advice引入的基类的左边。也就是说,基类的执行顺序会被影响。

引入属性的顺序也会影响构造函数和析构函数的执行顺序以及对象的布局。

Code Join Point

code join point上的advice可以是before, after,aroun的advice。对于before和around的advice而言,优先级越高意味着相应的advice代码会越早先运行。对after的advice而言,优先级越高意味着advice代码会越迟运行。

如果around的advice代码中不调用tjp->proceed()或不在action代码上调用trigger(),那么低优先级的advice代码就不会运行。低优先级的around advice不会影响高优先级的advice的执行。

例如,考虑下面这个aspect,它按下面的顺序定义了advice:BE1, AF1, AF2, AR1, BE2, AR2, AF3。如8.2节所述,定义顺序决定了优先级:BE1的优先级最高,AF3优先级最低。下面是advice代码的执行顺序:

1. BE1(优先级最高);

2. AR1((a) (b)中的advice只有在proceed()被调用时才会执行);

(a) BE2(在AR2之前执行,但BE2的执行依赖于AR1,如果AR2中不调用proceed(),那么就不会执行BE2);

(b) AR2(i和ii的代码只有在AR2中调用了proceed()才会执行)

i. join point的原始代码;

ii. AF3;

3. AF2(不依赖于AR1、AR2,因为AF2的优先级更高);

4. AF1(在AF2之后运行,因为AF1的优先级比AF2高)。

 

至此,对pure system《AspectC++ Language Reference》的翻译结束。接下俩会找点文章看看AspectC++的应用实例。

Apect c++ 教程 + 实例 +论文 +期刊 AOP 打包下载 搜集了 万方数据库 相关论文 期刊 以及网上 这方面几乎所有网页 都是自己学习之后留下来的 免去了大家搜集资料整理的麻烦 万方账号还是找别人借的~~~ 网上这方面 特别是c++可谓少之又少 搜集不容易 所以资源分高些 一些介绍 面向方面(aspect)的程序设计方法 程 虎 摘要 面向方面的程序设计(Aspect—Oriented Programming, AOP)是一种很有前途的新型程序设计 方法,它是面向过程、面向对象方法的进一步发展。通过引入方面概念,改进关注点的分离(separation of concerns),减少代码缠结(code tangling)解决横切关注点(cross cutting concerns)的问题, 提高软件质量和效率。 自1997年AOP以来的7年间,全球已开展大量有关研究与开发工作,并自2002年起每年召开专门 的国际学术会议(International conf .on Aspect-Oriented Software Development,AOSD)探讨问题, 交流取得的成果。 自1997 年首次在欧洲面向对象会议上提出AOP 以来的7 年间,全球已开展大量有关 研究与开发工作,并自2002 年起,每年春天分别在欧洲和美国轮流召开专门的面向方面软 件开发(AOSD )国际学术会议。第1 届是2002 年4 月在荷兰Enschede 召开,第2 届是 2003 年3 月在美国波士顿召开,第3 届是2004 年3 月在英国Lancaster 召开,第4 届将于 2005 年3 月在美国芝加哥召开。前三届的与会者包括美国、加拿大、荷兰、英国、法国、 德国、比利时、瑞士、西班牙、爱尔兰、丹麦和日本、以色列等。除了Xerox 公司,美国 IBM 公司的纽约Watson 研究中心,德国西门子公司和日本东芝公司等都投入研发,欧美 和日本的许多大学也在进行研究,我国北京大学和西安电子科技大学的软件研究所也对 AOP 给以关注并开展了一些研究开发工作。 从近年的发展来看,研究开发AOP 的角度很多,有的研究语言,有的研究规约和设计, 有的研究实现,应用还比较少,只是为研究而做些实例试验。但从各种刊物和会议上的报 告交流来看,提出了许多问题,并对不少问题进行了深入的分析研究,有的已提出解决方 案,并取得了初步成果。 面向对象方法技术从语言角度提出后,已在软件技术方面取得突破,并独树一帜,影 响操作系统、数据库、编译和网络软件的研发。现在AOP 也有类似情况,已有人在研究其 对操作系统、中间件等的研发作用,并已有一些文章发表。预计AOP 也会对软件技术发展 产生影响,希望我国软件工作者能适当投入力量,关注和进行AOP 的研发工作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值