快速业务通道

用AOP增强契约:用AspectJ为Java软件开发加入契约式设计 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
new ContractBrokeException("POSTCONDITION ERROR: " + " Return value of getCustomer shouldn''t be null"); } } /** * Check invariants */ public void checkInvariants(Object thisObject) throws ContractBrokeException { //invariants check } }

用AOP增强契约:用AspectJ为Java软件开发加入契约式设计(7)

时间:2011-09-07 ibm Filippo Diotalevi

清单 4 中的 CompanySystemContractManager类只检查参数或者返回值是否 为 nulll,但是可以使其增强为加入特别复杂的检查。

要注意的重要一点:每一个契约检查实例化一个 CompanySystemContractManager对象,因此可以通过在第一个不变量检查期间将 数据存储到私有字段中,并在执行完 CRM 系统调用后验证它们有没有改变,来 检查不变量。

恭喜!您已经开发了应用程序与 CRM 系统之间的一个简单的契约。在用 AspectJ 编译器编译这个应用程序后,这个契约将应用到对 CompanySystem类的 getCustomer方法的每一次调用上,并检查应用程序与它之间的交互的一致性。 而且,如果 CompanySystemContractManager足够一般化,就可以重复使用它, 只需要重新定义 targetPointcut就可以将它用于其他的契约检查。

这个示例解决方案完全满足我在本文开始时列出的四项要求:

它是 透明的,因为业务逻辑代码不包含对契约检查的引用,前者绝对不知道 后者。

它是 可重用的,因为它依赖于一个简单的基础设(一个接口和一个抽象方面 ),并使您可以在多种情况下重复使用一个 ContractManager。

它是 灵活的,因为可以使用 AspectJ 编译器帮助选择使用哪些方面,从而 选择要检查哪些契约。

它是 简单的,因为它只由几个类组成。

结束语

本文描述了在使用 AspectJ 和 AOP 进行 Java 应用程序开发时采用契约式 设计的可能方式。建议的解决方案保证了干净而灵活的解决方案,因为它使用一 个特别简单且很好地模块化的设计,使您可以将契约与业务逻辑分开编写并声明 式地应用它们。

本文配套源码

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