什么是AspectJ - 编程入门网
的钱数
// End Transaction
}
public float withdraw(AccountInfo account, float money){
// 验证account是否为合法用户
// Begin Transaction
// 减少account账户的钱数,返回取出的钱数
// End Transaction
}
};
我们看到,这些与商业逻辑无关的重复代码遍布在整个程序中。实际的工程项目中涉及到的类和函数,远远不止两个。如何解决这种问题? 我们首先来看看OOP能否解决这个问题。 什么是AspectJ(3)时间:2011-05-15 IBM 王海龙我们利用Design Pattern的Template Pattern,可以抽出一个框架,改变上面的例子的整个设计结构。 类和方法的定义如下:
这里我们用一种很勉强的方法实现了认证和事务代码的重用。而且,有心的读者可能会注意到,这种方法的前提是,强制所有的方法都遵守同样的signature。 如果有一个转账方法transfer(AccountInfo giver, AccountInfo receiver, float money),由于transfer方法的signature不同于yourBusiness的signature,这个方法无法使用上面的框架。 这个例子中提到的认证,事务等方面,就是AOP所关心的Aspect。 AOP就是为了解决这种问题而出现的。AOP的目的就是--Separation of Aspects (or Separation of Concerns). 下面的章节,解释EJB Descriptor,AspectJ,xDoclet等工具如何解决Separation of Aspects的问题。 3.EJB Descriptor 如果我们使用EJB实现上面的例子,Bank类可以作为一个Stateless Session Bean实现。 在Bank的代码中只用考虑商业逻辑,不用考虑认证和事务等方面。 认证和事务等方面在EJB Descriptor中定义,由EJB Container提供这些方面的实现。 我们来看一下,如何使用EJB Descriptor描述上面的例子。 什么是AspectJ(4)时间:2011-05-15 IBM 王海龙EJB Descriptor包括一个ejb-jar.xml文件。ejb-jar.xml文件包含两大部分,enterprise-beans和 assembly-descriptor部分。enterprise-beans部分包含EJB的定义--JNDI Name,EJB Home, Interface, Bean Class Path等;assembly-descriptor部分包括配置信息的定义--安全角色,事务控制等等。 下面给出上面例子对应的模拟EJB Descriptor。
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |