AOP@Work: 使用AspectJ 5检验库方面 - 编程入门网
忽略该切 入点。与方法类似,重写切入点可为强制的,也可为可选的,具体取决于超类型 开发人员是否认为默认实现不会导致错误。
AOP@Work: 使用AspectJ 5检验库方面(14)时间:2011-09-07 IBM Wes IsbergBuddy 对注释的理解:类的标记! Arnold 讲完后,轮到了 Buddy。他最初将 Java 5 注释视为标记,但生存期 的示例使其陷入思考。AspectJ 5 使部署者可利用 Java 5 注释选择性地使用切 入点,甚至与通知通信。Buddy 主动阅读了一些资料,指出 AspectJ 5 还允许 开发人员在方面内声明其他注释类型及其成员。因此,有两个关于在方面中使用 注释的问题:(1) 是否使用它们取代切入点或接口来指定关注;(2) 是在主体代 码中声明注释还是在方面中声明,或者是在两者中同时声明。 Buddy 正确地注意到,只有在主体联结点拥有可与注释关联的签名的运行时 中保持注释时,注释才是有用的,而这样的签名可为类型模式、字段、方法或构 造器。(标记接口同样限于类型主体。) 在确定注释与方面配合使用的方法时,Buddy 谈到注释与切入点之间有 3 点 不同。首先,注释用作程序源代码中可用的标志,标明其性质。其次,注释中可 包含在通知中用于控制行为的状态或代码(例如,在缓存示例中,注释中包含生 存期;在 Sun 的示例中,要在运行方法之前运行测试代码)。第三,注释可在 代码发生变化时更改,而不会影响到方面 —— 在使用库方面时,这是一个非常 重要的考虑事项,因为它在某种程度上实现了灵活性,不要求方面本身得到更新 。而对于像 Holly 这样期望以个案为基础添加新切入点主体的开发人员来说, 最后一点尤为重要。 为迅速地将问题转到注释的声明位置上,Buddy 提出以个案为基础添加大量 主体的一种方法是编写另外一个方面,声明结合新主体的一组注释。每个人都赞 同这种做法,但您提醒大家注意语言问题。通常,注释是一种针对特定领域的语 言的一部分,如事务或缓存。当开发人员需要代码环境中的提示时(例如,我们 前面遇到的幂等方法),注释可与受影响的成员相关;但若工具作为原则消费者 (如事务),则最好将规范合并在方面之中。 Buddy 表示可以混合声明类型,在代码中声明一些,再在方面中声明另外一 些。此外,编写库方面时,开发人员不必选定策略 —— 除非他们只希望由方面 来声明注释,此时可声明方面私有的注释。在任何情况下,这都是一个语言难题 :与其说问题在于选用 AspectJ 还是 Java 的问题,不如说是用户能否理解由 注释声明构成的 小型语言 是由方面(或其他工具)实现的。 在注释含有可引导通知行为的状态或代码时 —— 例如,在特定时间后使缓 存失效或运行测试代码,就体现出了注释最强大的用途。在解释程序通知解释或 调用注释时,注释数据/代码状态的表达力会受到一定限制,特别是在与联结点 状态结合时更是如此。务必谨慎,确保用户能够理解事情的来龙去脉。 Connor 将类型与联结点联系在一起 Connor 起初最关心的是集成方面,但他逐渐发现同时在通知参数或类型间声 明 (ITD) 和切入点内指定一种关注类型并不方便。若类型或切入点发生变化, 您就务必更改参数或 ITD,这增加了维护的难度。 还好,AspectJ 5 以通用方面、带有类型参数的抽象方面部分地解决了此类 问题。类型参数可用在切入点和成员声明中(但不能用在类型间声明中,至少现 在还是这样)。最佳范例就是 CacheMethodResult。此方面使用 Result 参数化 ,切入点和缓存值都按此方式指定。开发人员在具体方面中指定类型参数(例如 ,指定为 File),此后切入点仅选择返回 File 的方法,且映射仅接受类型值 File。这也就意味着从结构上修正了方面,而不必再检查不变量。 关于方面的合并,Connor 提 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |