一. 安装AspectJ
        从最简单的方面来说,AspectJ安装很简单:
         1.从http://www.aspectj.org下载最新版本(目前版本是1.6.0)。
         2.通过双击下载下来的JAR来安装。其默认安装目录为asprctj1.6目录。
         3.可在安装目录的bin目录下调用ajc命令查看帮助。
         4.使用AspectJ只需复制aspectjrt.jar即可。

二. 第一个简单的方面
        
简单的业务逻辑Java类
package  com.oreilly.aspectjcookbook;

public   class  MyClass  {
    
public void foo(int number , String name) {
        System.out.println(
"Inside foo(int , String)");
    }

    
    
public static void main(String[] args) {
        
//Create an instance of MyClass
        MyClass myObject = new MyClass();
        
//Make the call to foo
        myObject.foo(1 , "Russ Miles");
    }

}

        AspectJ的简单的HelloWorld方面
package  com.oreilly.aspectjcookbook;

public  aspect HelloWorld  {
    pointcut callPointcut() :
        call(
void com.oreilly.aspectjcookbook.MyClass.foo(int,String));
    
    
    before() : callPointcut() 
{
        System.out.println(
"Hello World");
        System.out.println(
"In the advice attached to the call pointcut");
    }

}

将上述两个文件保存在同一目录中,运行ajc命令,编译这两个文件,并产生方面和类的.class文件。
        ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% com/oreilly/aspectjcookbook/MyClass.java com/oreilly/aspectjcookbook/HelloWorld.java
在使用上述命令过程中,需要确保aspectjrt.jar在你的类路径中。
ajc编译器会将产生两个.class文件:MyClass.class和HelloWorld.class。并可通过正常的java命令来运行:
        java -classpath %MY_CLASSPATH% com.oreilly.aspectjcookbook.MyClass
可得到如下结果:
        Hello World
        In the advice attached to the call pointcut  
        Inside foo(int , String)
是不是很简单呢?现在我们来分析一下方面的每一行的含义:
 1 package  com.oreilly.aspectjcookbook;
 2
 3 public  aspect HelloWorld  {
 4    pointcut callPointcut() :
 5        call(void com.oreilly.aspectjcookbook.MyClass.foo(int,String));
 6    
 7    
 8    before() : callPointcut() {
 9        System.out.println("Hello World");
10        System.out.println("In the advice attached to the call pointcut");
11    }

12}


 第3行声明了一个方法。
 第4行和第5行声明单一命名的切入点的逻辑。切入点逻辑指定了应用程序中的任何连接点,本例中会捕获对void com.oreilly.aspectjcookbook.MyClass.foo(int,String)方法的调用。切入点被命名为callPointcut(),使得可以在方面的作用域内的任意位置都可以引用它。
 第8行到11行声明单一通知块。before()通知只是简单地指出它将在任何被callPointcut()切入点匹配的连接点之前执行。
注意:除了.java可作为后缀名以外,.aj也可以作为后缀名使用。ajc工具都会编译所提供的文件。两者没有区别,只是个人喜好而已。

三. 编译一个方面和多个Java文件
    
如果需要多个文件,那么按上述方法编译是一件痛苦的事情。好在我们可以编写一个AspectJ配置构建文件。配置构建文件的后缀名为.lst,其中包含了所有在编译中需要使用的类文件和方面的名称。如:
        //File in file.lst
        com/oreilly/aspectjcookbook/MyClass.java
        com/oreilly/aspectjcookbook/MyAspect.java
        com/oreilly/aspectjcookbook/AnotherClass.java
        com/oreilly/aspectjcookbook/AnotherAspect.java
然后使用如下命令编译:
        ajc -argfile file.lst -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY%

四. 织入方面到jar中
    1.首先编译MyClass.java并打包到MyApp.jar中
        java -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% com/oreilly/aspectjcookbook/MyClass.java
        jar -cvf MyApp.jar com/oreilly/aspectjcookbook/MyClass.class
    2.ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% -inpath MyApp.jar com/oreilly/aspectjcookbook/HelloWorld.java
        -inpath选项强制ajc编译器从提供的.jar文件中把Java字节码提取到-d选项所指定的目录中。然后,ajc编译器将把字节码在方面织入过程中。
    3. 上述命令并不会产生新的.jar包,如需要将方面织入到新的包中,则需要使用-ourjar选项:
        ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% -inpath MyApp.jar -outjar MyAspectOriente的App.jar com/oreilly/aspectjcookbook/HelloWorld.java

五.其他
  aj命令可以加载时织入方面
  ajdoc则可生成Javadoc文档

六. 使用Ant构建一个AspectJ项目

<? xml version="1.0" encoding="utf-8" ?>
< project  basedir ="."  default ="compile"  name ="test" >
    
< property  name ="src"  value ="src" />
    
< property  name ="build"  value ="build" />
    
< taskdef  resource ="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties" >
        
< classpath >
            
< pathelement  location ="%ASPECTJ_INSTALLATION%/lib/aspectjtools.jar" />
        
</ classpath >
    
</ taskdef >
    
< target  name ="compile" >
        
< mkdir  dir ="${build}" />
        
< iajc  destdir ="${build}"  sourceroots ="${src}" >
            
< classpath >
                
< pathelement  location ="%ASPECTJ_INSTALLATION%/lib/aspectjrt.jar" />
            
</ classpath >
        
</ iajc >
    
</ target >
</ project >

    上述代码所做的工作:
      1. 使用AspectJ任务属性定义了一个新的任务
      2. 指定aspectjtools.jar的位置
      3. 声明一个构建目标,他使用iajc任务来编译项目,这个任务反过来又依赖于aspectjrt.jarlai