快速业务通道

AOP@Work: AOP和元数据:完美的匹配,第2部分-用元数据实现多维接口 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

AOP 系统,如 Hyper/J (现在发展为 Concern Manipulation Environment, 请参阅 参考资料)注重关注点空间的多维视图,利用元数据,我们同时有了一种 提供多维签名空间的方法。

在将元数据看成多维签名这种思路中,签名的每位消费者只使用与其关注点相 关的投射。因此,在上面的例子中,将由签名所表示的点投射到业务维会获得名 称“credit”。对于业务关注点的实现,重要的就是所执行的操作是 “信贷业务 ”。业务关注点不知道(或者不需要知道)任何其他维中的值。例如,业务关注 点不需要知道事务属性。

与此类似,当同一操作投射到事务管理维上时,我们就得到值 Required。现 在,从事务管理实现的角度看,这一点在业务维中的值是不重要的 —— 它可以 是 credit、debit 或者任何其他值。您可以猜到,对于认证关注点的实现也是一 样:该点在业务和事务管理维中的投射无关紧要。

启用多维接口

延伸多维签名的概念,注释可以用来表示多维接口。与只表示核心维的常规一 维接口不同,注释可以有多个接口 —— 应用程序中的每一个关注点有一个。一 个关注点的实现只要考虑投射到相关维中的接口。就像传统接口可以很好地服务 于面向对象的世界视图那样,支持元数据的接口(方面化的接口)也可以服务于 面向方面的世界视图。

AOP 实践者都知道,在第一次介绍 AOP 时,常常要说明一个多维分解,该分 解类似于用元数据所进行的多维分解。因此,元数据概念与 AOP 概念非常匹配。 在通过元数据增强的 AOP 实现中,就像平时做的那样,可以将核心关注点映射到 类。区别是现在将系统的横切关注点映射到使用了投射到相关维中的多维接口的 方面。

接口示例

参见清单 1 中的 Account 类这个例子。注意元数据注释如何使将类投射到多 维接口更顺利。

清单 1. 包含已注释方法的 Account 类

public class Account {   @Transactional(kind=Required)    @WriteOperation   @Authorization(kind="bankModification")    public void credit(float amount) {     ... credit operation business logic   }   @Transactional(kind=Required)    @WriteOperation   @Authorization(kind="bankModification")    public void debit(float amount) {     ... debit operation business logic   }   @Transactional(kind=None)    @ReadOperation   @Authorization(kind="bankQuery")   public float getBalance() {     ... balance query operation business logic   }   ... }

AOP@Work: AOP和元数据:完美的匹配,第2部分-用元数据实现多维接口(4)

时间:2011-09-04 IBM Ramnivas Laddad

从业务角度看,对这个接口的投射会映射到以下接口:

public class Account {   public void credit(float amount) {     ... credit operation business logic   }   public void debit(float amount) {     ... debit operation business logic   }   public float getBalance() {     ... balance query operation business logic   }   ... }

上面的接口包括了所有成员,但没有包含注释。投射同一个接口到事务管理维 会得到以下接口:

public class Account {   @Transactional(kind=Required)    * *.*(..)) {   }   @Transactional(kind=Required)   * *.*(..)) {   }   @Transactional(kind=None)   * *.*(..)) {   }   ... }

在该例中,我使用了 AspectJ 通配符符号来表示方法,没有考虑名字、类型 、参数等因素。其他维中的投射与此类似。

其他维

像前面介绍的那样

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号