快速业务通道

什么是AspectJ - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

什么是AspectJ

时间:2011-05-15 IBM 王海龙

1. 序

Aspect Oriented Programming (AOP)是近来一个比较热门的话题。

AspectJ是AOP的Java语言的实现,获得了Java程序员的广泛关注。

关于AspectJ和AOP的具体资料,请从下列链接中查找:

http://www.eclipse.org/aspectj/

http://www.parc.com/research/csl/projects/aspectj/

http://aosd.net/

网上出现了很多讲解AspectJ的资料,但大多是从讲解AspectJ语法开始,然后讲解如何应用AspectJ,如何分离软件开发过程的不同方面(Aspect)--Log,Session,Authentication and Authorization,Transaction,等等。

初次接触AspectJ的读者看到这些资料(或者语法手册),会感到AspectJ有些神秘。他们想知道,AspectJ是如何做到这些的?AspectJ是怎样工作的?AspectJ需要特殊的运行环境吗?

本文从另一个角度讲解AspectJ,本文从讲解AspectJ的设计思路、运行原理入手,回答上述问题。

本文讲解的主要内容,按照概念的重要程度,排列如下:

AspectJ是一个代码生成工具(Code Generator)。

AspectJ语法就是用来定义代码生成规则的语法。您如果使用过Java Compiler Compiler (JavaCC),您会发现,两者的代码生成规则的理念惊人相似。

AspectJ有自己的语法编译工具,编译的结果是Java Class文件,运行的时候,classpath需要包含AspectJ的一个jar文件(Runtime lib)。

AspectJ和xDoclet的比较。AspectJ和EJB Descriptor的比较。

本文的原则是,只细讲其他资料没有讲到的东西,其他资料讲过的东西,不讲或略讲。以节省网络资源,更为了节省大家宝贵的时间。

2.Aspect Oriented Programming (AOP)

本节简单介绍AOP的概念,解释我们为什么需要AOP。

AOP是Object Oriented Programming(OOP)的补充。

OOP能够很好地解决对象的数据和封装的问题,却不能很好的解决Aspect("方面")分离的问题。下面举例具体说明。

比如,我们有一个Bank(银行)类。Bank有两个方法,deposit(存钱)和withdraw(取钱)。

类和方法的定义如下:

Code 2.1 Bank.java class Bank{ public float deposit(AccountInfo account, float money){   // 增加account账户的钱数,返回账户里当前的钱数 } public float withdraw(AccountInfo account, float money){   // 减少account账户的钱数,返回取出的钱数 } };

什么是AspectJ(2)

时间:2011-05-15 IBM 王海龙

这两个方法涉及到用户的账户资金等重要信息,必须要非常小心,所以编写完上面的商业逻辑之后,项目负责人又提出了新的要求--给Bank类的每个重要方法加上安全认证特性。

于是,我们不得不分别在上面的两个方法中加入安全认证的代码。

类和方法的定义如下:(新增加的代码用不同的背景标出)

Code 2.2 Bank.java class Bank{ public float deposit(AccountInfo account, float money){   // 验证account是否为合法用户   // 增加account账户的钱数,返回账户里当前的钱数 } public float withdraw(AccountInfo account, float money){   // 验证account是否为合法用户   // 减少account账户的钱数,返回取出的钱数 } };

这两个方法都需要操作数据库,为了保持数据完整性,项目负责人又提出了新的要求--给Bank类的每个操作数据库的方法加上事务控制。

于是,我们不得不分别在上面的两个方法中加入安全认证的代码。

类和方法的定义如下:(新增加的代码用不同的背景标出)

Code 2.3 Bank.java class Bank{ public float deposit(AccountInfo account, float money){   // 验证account是否为合法用户   // Begin Transaction   // 增加account账户的钱数,返回账户里当前

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