AOP@Work: AOP和元数据:完美的匹配,第1部分 - 编程入门网
匹配,第1部分(11)
时间:2011-09-04 IBM Ramnivas Laddad
清单 4 显示了具有参与者子方面的 Customer 类,它负责定义嵌入类的切入 点。 清单 4. 带有嵌入参与者方面的 Customer 类
示例 Customer 类中的子方面只是枚举所有以通配符作为参数的方法。不过在 现实中,可能会使用通配符简化切入点的定义。例如,可以使用下面的定义,声 明 transactedOps() 切入点捕获类的所有公共方法:
在清单 5 中,可以看到 Account 类是如何嵌入一个子方面,从而参与系统的 事务管理功能。 清单 5. 带有嵌入参与者方面的 Account 类
AOP@Work: AOP和元数据:完美的匹配,第1部分(12)时间:2011-09-04 IBM Ramnivas Laddad与 Customer 类一样,增加这一步会简化这个切入点。例如,如果发现除了 getBalance() 方法之外,所有公共方法都需要在事务管理中执行怎么办?可以定 义这个切入点,按下方所示方法捕获这种实现:
现在,如果类发生改变,那么只需要修改类中嵌套的子方面即可。我已经将系 统耦合减少到每个子方面所捕获的更少的程序元素数(比如说从 n 减少到 1), 以此取代了那个大大的 N。而且,如果类改变了事务管理需求,只需要改变嵌入 的参与者方面中的切入点即可,这样可以防止局部性。 这个例子展示了在关于 AOP 的讨论中常常会漏掉的重要一点:如果试图找到 整个系统的签名模式,那么就会看到一个令人不快的意外 —— 不稳定的、复杂 的和不正确的切入点。不过,考虑系统的子集时,通常会发现对整个子系统都适 用的签名模式。使用每个类具有一个方面的 Participant 模式,将每个类视为一 个子系统,而将任何逻辑分为子系统都可以做得很好。 这种解决方案对于大多数情况是合理的。它的不利之处是类直接依赖于基本方 面,因此基本方面必须总是出现在系统中。这种解决方案的另一个问题是它的横 切功能不能使用,除非类通过嵌入嵌套的子方面显式“参与”协作。这个问题更 多时候与横切功能的本性有关、而不是与解决方案有关。并且,很快您就会看到 ,可以对它稍加改进。 版本 4: 基于元数据的切入点 在这个回合中,我准备修改每一个方法,让它有一个注释,并退回到只在系统 中使用一个子方面(像在 版本 2 中一样)。不过,这次我的子方面将使用一个 基于元数据的切入点来捕获所需要的连接点,该连接点携带我提供的注释的方法 。这个子方面本身可以在系统中重用。图 4 显示了这个版本的示意图。 图 4. 元数据驱动的事务管理 AOP@Work: AOP和元数据:完美的匹配,第1部分(13)时间:2011-09-04 IBM Ramnivas L |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |