快速业务通道

AOP@Work: AOP和元数据:完美的匹配,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
实例的支持。

AOP@Work: AOP和元数据:完美的匹配,第1部分(7)

时间:2011-09-04 IBM Ramnivas Laddad

在 AOP 中提供注释

使用 AOP 结构提供注释背后的基本想法是避免将程序元素定义与注释相混淆 。概念上,这种结构可以以横切的方式在程序元素上附加注释。初看之下,使用 AOP 构造提供注释、然后使用这些注释捕获连接点似乎是不必要的、多余的。总 之,如果可以确定需要注释的连接点,那么就可以编写一个切入点,并直接通知 这些连接点。不过,以横切的方式提供注释是很有用的。首先,这种声明可以作 为与非 AOP 客户通信的管道。其次,以横切机制提供注释使得设计一种更松散耦 合的系统、同时避免注释混乱成为可能。

在本文最后,我将说明使用 AOP 构造提供注释带来的一些设计可能性。现在 ,我将展示以横切方式提供注释的基本语法。

提供注释语法

AspectJ 建议的语法扩展了当前的静态横切构造,以创建一个新的 declare annotation 语法。下面的代码段将附加一个类型为 Authenticated 的、 permission 属性设置为 banking 的注释:

declare annotation : * Account.*(..)           : @Authenticated(permission="banking");

@AspectJ 切入点还通过使用 @DeclareAnnotation 支持同样的功能,可以像 下面这样编写同样的声明:

@DeclareAnnotation("* Account.*(..)") @Authenticated (permission="banking") void bankAccountMethods();

在 JBoss AOP 中,当使用 XML 样式的方面时,可以用 annotation- introduction 元素附加注释。invisible 属性指出在运行时是否保留注释(等同 于标准 Java 元数据功能中的 RetentionPolicy.SOURCE)。

<annotation-introduction expr="method(* Account->*(..))"              invisible="false">    @Authenticated (permission="banking") </annotation-introduction>

可以看出,提供注释的原理在不同的 AOP 系统中是相同的,尽管语法不一样 。

使用元数据的 AOP 设计

从前面几节中可以看出,将元数据与 AOP 结合是相当简单的。重要的是知道 什么时候使用基于元数据的横切、什么时候不使用它。在本节中,通过考虑系统 如何从一个使用隐式连接点属性的 AOP 实现进化为一个结合了基于元数据切入点 的实现,我将回答这个问题。在第 2 部分中,我将探讨选择元数据驱动方式的概 念性问题。

本节的讨论应当在两个方面提供帮助:首先,作为 AOP 实践者,使用元数据 并不总是第一或者惟一的选择,理解这一点很重要。其次,这里的示例实现可以 指导您在决定使用基于元数据的横切后,如何改进设计。

可以将一个事务管理程序作为练习的例子。虽然我使用了 AspectJ 开发这个 例子的所有代码,但是在其他 AOP 系统中的实现在概念上是相同的。将这个练习 中的每一步都看成是对原设计的改造。目标是逐渐分离系统并改进其模块性。

AOP@Work: AOP和元数据:完美的匹配,第1部分(8)

时间:2011-09-04 IBM Ramnivas Laddad

版本 1: 原生方面

我模块化一个横切功能的第一次尝试是使用特定于系统方面,它包含了切入点 定义和这个切入点的通知。这是非常简单的方案,并且通常是学习 AOP 时遇到的 第一个设计。图 1 显示了这个使用一个方面的设计示意图:

图 1. 用 AOP 实现事务管理的第一个努力

AOP@Work: AOP和元数据:完美的匹配,第1部分 - 编程入门网

清单 1 实现上述设计

清单 1: 银行系统的事务管理方面

public aspect BankingTxMgmt {   pointcut transactedOps()     : execution(void Customer.setAddress(..))      || execution(void Customer.addAccount(..))      || execution(void Customer.removeAcco

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号