什么是AspectJ

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账户的钱数,返回取出的钱数
}
};

时间: 2024-09-15 20:27:29

什么是AspectJ的相关文章

Eclipse发布AspectJ 5 正式版

AspectJ 5 正式版 发布了. Eclipse提到: At long last, we're delighted to say that AspectJ 5 is here in time for Christmas! AspectJ 5 正式版 与之前的RC1比较,主要是fix了几个小的bugs. AspectJ和AspectWerkz之前合并成归于Eclipse基金下的AspectJ5项目.AspectJ由BEA和IBM公司赞助,可以认为是Java AOP事实上的标准. AspectJ

spring入门(10) 使用Aspectj进行AOP开发

添加类库:aspectjrt.jar和aspectjweaver.jar 添加aop schema. 定义xml元素:<aop:aspectj- autoproxy> 编写java类,并用@Aspect注解成通知 AspectJ 支持 5 种类型的通知注解: @Before: 前置通知, 在 方法执行之前执行 @After: 后置通知, 在方法执行之后执行 @AfterReturning: 返回通知, 在方法返回结果之后执行 @AfterThrowing: 异常通知, 在方法抛出异常之后 @A

AOP@Work: 用Contract4J进行组件设计-用契约式设计和AspectJ改进软件

简介:契约式设计(Design by Contract)是切实可行的技术,可以阐明组 件 设计的细节.为客户记录正确的组件用法,并用编程的方式测试组件使用的顺应 性(compliance).在 AOP@Work 的最后一篇中,Dean Wampler 介绍 了 Contract4J,这是契约式设计的工具,它用 Java 5 标注 (annotation)指定合约,并在运行时用 AspectJ 方面计算合约.在成为 AOP 工具包中新增的一个举足轻重的工具的同时,Contract4J 迎合了面向方

AOP@Work: 用AspectJ进行性能监视,第2部分

通过装载时织入使用Glassbox Inspector 简介:有了基本的面向方面的监视基础架构后,可以对它进行扩展以满足真 实 世界的监视要求.在这篇由两部分组成的文章的第二部分,Ron Bodkin 展示了 如 何在 Glassbox Inspector 中添加企业监视功能,包括监视多个应用程序.Web 服务和 Web 应用程序框架.他还展示了如何跟踪应用程序错误并在监视代码中 包 含它们,并展示了如何以编程方式部署和控制这个监视基础架构. 我在本文的 第 1 部分 中给出的基本 Glassb

AOP@Work: 用AspectJ进行性能监视,第1部分

用AspectJ和JMX深入观察Glassbox Inspector 简介:随着 Ron Bodkin 介绍如何把 AspectJ 和 JMX 组合成灵活而且模块 化 的性能监视方式,就可以对散乱而纠缠不清的代码说再见了.在这篇文章(共分 两部分)的第一部分中,Ron 用来自开放源码项目 Glassbox Inspector 的代码 和想法帮助您构建一个监视系统,它提供的相关信息可以识别出特定问题,但是 在生产环境中使用的开销却足够低. 现代的 Java 应用程序通常是采用许多第三方组件的复杂的

AOP@Work: 用AspectJ和Spring进行依赖项插入

面向方面开发人员可以采用的高级技术 简介:依赖项插入和面向方面编程是互补的技术,所以想把它们结合在一起 使 用是很自然的.请跟随 Adrian Colyer 一起探索两者之间的关系,并了解怎样 才 能把它们组合在一起,来促进高级的依赖项插入场景. 依赖项插入和面向方面编程(AOP)是两个关键的技术,有助于在企业应用程 序中简化和纯化域模型和应用程序分层.依赖项插入封装了资源和协调器发现的 细节,而方面可以(在其他事情中)封装中间件服务调用的细节 -- 例如,提 供事务和安全性管理.因为依赖项插入

AOP@Work: 使用AspectJ 5检验库方面

编写符合所有类型用户需求的可重用方面 简介:AspectJ 5 新的语言和部署特性简化了库方面(library aspect), 而 库方面又保证一般的开发人员能够掌握 AOP.尽管有着不可思议的易用性,但它 们编写起来非常困难.在 AOP@Work 系列 的这部分内容中,Wes Isberg 编了一个假想的故事,故事所讲述的世界离您的现实生活并不遥远,其 中 有 30 个重大的挑战.通过这个故事,您将学会如何使用及编写库方面,以及如 何为相信这一技术和不相信这一技术的人交付解决方案. 救命!

AOP@Work:介绍AspectJ 5

AspectJ 5 (目前处在它的第二个里程碑版本)的主要重点是对 Java 5 中引 入的新 Java 语言特性(包括注释和泛型)提供支持.AspectJ 5 还包含没有加 入 Java 5 的新特性,例如基于注释的开发风格.改进的装入时织入和新的方面 实例化模型. 在 AOP@Work 系列的这一期中,我概述了 AspectJ 5 语言和包含 AspectJ 编 译器及相关工具的 AspectJ 5 版本.我先介绍如何用 AspectJ 5 编译器编译 Java 应用程序 (既可以用命令行编

用AspectJ实现工厂方法模式

工厂方法模式根据产品的等级结构使用对应的工厂来创建特定的产品,它一般包括抽象工厂.具体工厂和抽象产品.具体产品,每一个特定工厂用于创建一个对应的产品.模式的简易UML图例如下 下面是使用AspectJ实现的工厂方法模式UML图 抽象方面FactoryMethodProtocol很简单只定义了抽象pointcut createMethod用于捕捉特定应用的创建方法(也可以省略). FactoryMethodProtocol抽象方面 public abstract aspect FactoryMet

AspectJ和模仿对象的测试灵活性

用"test-only"行为增强单元测试 简介: 在开发过程中结合了单元测试的程序员都了解这样做带来的好处:代码更简洁,敢于重构.速度更快.但即便是最执著的单元测试者,在碰到测试行为依赖于系统状态的类的情况时,也会显得信心不足.Nicholas Lesiecki 是一名受人尊敬的 Java 程序员,也是 XP 社区的领导者,他将介绍围绕测试案例隔离的问题,并向我们展示如何使用模仿对象(mock object)和 AspectJ 来开发精确和健壮的单元测试. 最近,人们对极端编程(Ext