用AOP增强契约:用AspectJ为Java软件开发加入契约式设计 - 编程入门网
)
{
System.out.println("Performing post conditions check");
cManager.checkPostConditions(thisJoinPoint.getTarget(), obj, thisJoinPoint.getArgs());
}
if (cManager!=null)
{
System.out.println("Performing final invariants check");
cManager.checkInvariants(thisJoinPoint.getTarget ());
}
return obj;
}
}
用AOP增强契约:用AspectJ为Java软件开发加入契约式设计(5)时间:2011-09-07 ibm Filippo DiotaleviAbstractContract 方面表示两个抽象方法,在实现具体的契约检查器方面时 必须实现这两个方法: public abstract pointcut targetPointcut() 表示其中必须应用 advice 的 pointcut。pointcut 必须是一个方法调用。 public abstract ContractManager getContractManager() 必须返回实现了 正确的契约检查的 ContractManager 的一个实例。 一定要注意不变量检查执行了两次,是在服务执行之前和之后。这使您可以 检 查服务的执行有没有影响一些外部字段的值。 契约的失败会导致 ContractBrokeException ,这会停止 advice 的执行。 实际的契约检查 理解了用 AOP 实现契约式设计的必要基础设施后,就可以让它工作了。假定 需要查询一个外部客户关系管理 (CRM) 系统以获取客户的数据。可能像下面 这 样调用 CRM 系统: Customer cus = companyCustomerSystem.getCustomer("Pluto"); 从开发人员的角度看, getCustomer 函数的实现是不重要的,因为 getCustomer 是一个外部组件。但是检查它是否返回破坏性的结果是非常重要的 。它与保证应用程序不传递错误或者无意义的输入给 CRM 系统同样重要。可以 通 过开发一个扩展了 AbstractContract 的具体方面解决这两种意外情况。具体的 方面覆盖两个方法: targetPointcut(),定义应用契约检查的 pointcut。 getContractManager(),定义负责执行所有检查的 ContractManager实现。 清单 3 显示了示例应用程序的具体方面: 清单 3. 具体契约方面
CcCompanySystem方面指定契约检查器调用的 CompanySystemContractManager将对由 CompanySystem类的 getCustomer方法的 调用所表示的 pointcut 应用。不需要定义契约检查操作的控制逻辑,因为它继 承自 清单 2中的前辈 AbstractContract抽象方面。 用AOP增强契约:用AspectJ为Java软件开发加入契约式设计(6)时间:2011-09-07 ibm Filippo Diotalevi最后一步是开发一个进行契约检查的 Java 类。如前所述,这个类必须实现 ContractManager接口。清单 4 显示了一个示例 CompanySystemContractManager类: 清单 4. 示例应用程序的 ContractManager 实现
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |