AOP@Work: 用Contract4J进行组件设计-用契约式设计和AspectJ改进软件 - 编程入门网
生成的表达式,返回 true(通过)或 false(失败)。如果测试失败,就报告 错误消息,指出故障点,同时程序执行中断。
例如,在 清单 1 中,如果调用 withdraw(),那么就在执行方法之前, Contract4J 会用 amount 的输入值计算表达式 amount >= 0。例如,如果 amount = -1.0,那么测试失败,就会报告出带有堆栈信息、指出故障位置的报 告,并且应用程序退出。 同样,后置条件测试大致与 after 建议对应。但是,为了支持 $old 关键字 ,实际上使用的是 around 建议,在该建议中,计算 $old 关键字中的 “子表 达式”,保存结果,执行原来的连接点,然后插入 “旧” 值,再计算完整的测 试表达式。 最后,不变条件测试使用 around 建议,在该建议中,在连接点执行之前和 之后都计算测试,同时具有前面提到过的例外。 调用像 JEXL 这样的解析器确实会增加不小的开销,因为 Contract4J 只设 计为在开发和测试期间使用,而在这两个期间内,开销不是严重的问题。但是, 可能会发现有些频繁执行的代码块不应当拥有测试。 采用 Contract4J 因为 Contract4J 的合约测试是用熟悉的 Java 规范编写的,所以把它采用 到 Java 环境中很简单,包括四个步骤: 1.下载 Contract4J 并解压缩到方便的地方。除非想重新构建它(按照 README 中包含的说明),否则只需要 contract4j5.jar 文件。 2.把 contract4j5.jar 文件的位置添加到构建 CLASSPATH。 3.下载 并安装 AspectJ。 4.从当前 Java 编译器切换到 AspectJ 的 “ajc” 编译器,它也可以编译 Java 代码。AspectJ 的主页上提供了详细信息,发行版自带了 Ant 脚本。或者 ,如果喜欢继续使用现有的 Java 编译器,可以有两个附加选项: 可以在构 建的末尾加入一个 ajc “织入” 步骤,把 contract4j5.jar 中的方面编织进 预编译的类或 JAR 中。 可以在装入时 “织入” 合约,正如 AspectJ 文档中所解释的。 5.现在请开始把 Contract4J 标注添加到源代码中,以定义自己的合约! AOP@Work: 用Contract4J进行组件设计-用契约式设计和AspectJ改进软件(5)时间:2011-09-07 IBM定制 Contract4J 在运行时使用属性文件或 API 调用,可以开启或禁止所有测试,即前置条件 测试、后置条件测试或者不变条件测试。正常情况下,对于生产部署,构建时应 当不用 contract4j5.jar,以便不增加运行时开销。 使用 API 调用可以有丰富的定制,包括 “插件钩子”,用来插入自己的 Java 类,实现不同的行为。甚至可以替换 JEXL 表达式解释器。 Contract4J 的主页(请参阅 参考资料)提供了有关 API 、其他定制选项以 及允许的测试表达式、已知的限制和特性方面的丰富文档。也可以在发行版中的 构建 “ant docs” 目标,以生成完整的 Javadocs。 Contract4J 和 AOP 除了是开发人员的有用工具之外,Contract4J 的意义还有两个原因:首先, 它是越来越多的采用方面的 Java 开发工具中的一个,对于开发人员来说或多或 少地是透明的。另一个示例是在本系列前面讨论过的 Glassbox Inspector。此 外,Spring 框架大量地采用纯 Java 和 AspectJ 方面来支持中间件服务,而 JBoss 也使用纯 Java 方面实现同一目的。请参阅 参考资料,了解关于这三个 项目的更多内容。 其次,Contract4J 使用简单的基于接口的方式进行方面设计。面向方面社区 中的许多人目前都在把基于接口的设计这个概念从对象世界扩展到正在出现的方 面/对象世界中,所以这个主题值得进一步讨论。 定义方面接口 标注通常用来指示代码的元信息。在这个示例中,Contract4J 用标注捕获组 件的合约约束,这些约束已经成为了接口的一个基本组成部分,而不是 “附属 于 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |