AspectJ是Java语言的一个AOP实现,其主要包括两个部分,第一个部分定义了一套如何表达、定义面向切面(AOP)编程中的相关概念(如连接点、切入点、增强、切面等)的语法规范。通过这套语言规范,我们可以方便地用AOP来解决java语言中存在的交叉关注点问题。AspectJ的另外一个部分是工具部分,包括编译器、调试程序的工具以及为了更方便开发基于AOP应用而设计的开发集成工具等。
AspectJ是最早、功能比较强大的AOP实现之一,是为数不多的比较完整的AOP的实现,在AOP领域基本上充当着行业领头羊的角色,被誉为AOP领域的急先锋。AspectJ的功能比较强大,从连接点、切入点、通知、引介到切面定义都有一套比较完整的机制,很多其它语言的AOP实现,也借鉴或采纳了AspectJ中很多设计。在Java领域,AspectJ中的很多语法结构基本上成了AOP领域的标准,比如:在Spring2.0中,AOP部分就作了比较大的调整,不但引入了对AspectJ的支持,其自己的AOP核心部分的很多使用方法、定义乃至表示等都力求保持与AspectJ一致。因此,要学习使用AOP,我们有必要从AspectJ开始,因为他本身就是java语言AOP解决方案,就算不用Spring,也可以独立地用于我们的Java应用程序中。
AspectJ是Eclipse下面的一个开源项目,当前发布的版本是AspcetJ5。
当然,在实际开发中,我们很少使用命令行来编译或调试程序了。一般情况下都是使用功能比较强大的专业Java开发工具及平台。AspectJ除一套完整的语法规范以外,还提供在各种常用java开发工具开发AspectJ程序的插件,包括Eclipse、JBuild、NetBeans、JDeveloper等。在这里,使用AspectJ与Eclipse集成应用。
首先需要下载并安装AspectJ的Eclipse插件AJDT(AspectJ Development Tools)。
直接到AJDT的官方网站http://www.eclipse.org/ajdt/上面,根据自己的Eclipse版本,选择下载相应的版本的插件。下载下来的插件是一个形如ajdt_1.4_for_eclipse_3.2.zip的压缩文件,其中包含features及plugins两个目录。
Ajdt的安装和其它eclipse插件完全一样,解压,features及plugins拷贝覆盖到相应目录,重启eclipse就OK了。进入eclipse,发现多了个按钮,有AJ字样,点击就弹出创建AspectJ项目的窗口。先别着急,再查看window->preferences发现多了AspectJ和Visualiser栏目,随便点点,也不用做什么更改,就能确认AJDT已经成功的集成进来了。
下面演示在Eclipse中建立AspectJ版本HelloWorld,首先需要安装AspectJ的Eclipse插件AJDT。然后新建一个AspectJ工程,可以点击右上方带AJ字样的新建工程快速新建,也可以像建立普通工程那样在项目栏右键点击New-》other,选择AspectJ Project工程 如下图:
然后在工程中新建一个demo包.里面建个叫Hello的普通Java类,内容如下:
- package demo;
- public class Hello {
- public void sayHello() {
- System.out.println("Hello YangFan!");
- }
- public static void main(String[] args) {
- Hello h = new Hello();
- h.sayHello();
- }
- }
然后使用使用Eclipse新建一个名为HelloAspect的Aspect切面,如下图
在HelloAspect中定义了一个名为somePointcut()的切入点,定义了两个增强,其中一个是在连接点前执行,一个是在连接点后执行。HelloAspect的全部代码如下所示:
- package demo;
- public aspect HelloAspect {
- pointcut somePointcut():execution(* Hello.sayHello()); //声明一个切入点
- before():somePointcut(){ //切入点前通知
- System.out.println("要准备说Hello了...");
- }
- after():somePointcut(){ //切入点后通知
- System.out.println("Hello已经说完!");
- }
- }
注意这个文件的后缀不是.java了,而是.aj,这个文件将被AspectJ的编译器来编译成.class文件
在Hello上点右键,使用【Run As】->【Java Application】运行Hello,即会看到程序输出结果
- 要准备说Hello了...
- Hello YangFan!
- Hello已经说完!
这个小例子就算完成了,很简单。