AspectJ学习笔记(二)

前面讲过一个关于AspectJ的例子,其实不用这么麻烦,现在可以在他的官方网站下载最新的JAR包,直接安装就可以了,安装完成以后有两个地方海上是需要设置一下

1.PATH里面加上${AspectJ HOME}/BIN

2.CLASSPATH里面加上${AspectJ HOME}/LIB

这样环境就OK了,很简单把!下面就实现一个经典的HELLO WORLD!例子:

class Test {
  public void helloWorld() {
    System.out.println("Hello World");
  }

  public static void main(String args[]) {
    Test test = new Test();
    test.helloWorld();
  }
}

这个是个纯JAVA文件,没有什么好说的,下面看看ASPECT

public aspect TestAspect {
  pointcut outputLog() : call(public void helloWorld());
  before() : outputLog() {
    System.out.println("Before Call");
  }
}

下面我简单的讲一下上面语句的意思:

call(public void helloWorld());中的public void helloWorld()在AOP中间叫做JOIN POINT就是宿主语言的一个方法,也叫观察点,编写任何一个ASPECT程序都要先在宿主语言中找好这个观察点,简单的说就是主程序的功能,也就是你要监视的切入点,CALL叫做指示符,有点想关键字,其意思是监测方法的执行,和他意思差不多的有个叫做EXECUTION的,其差别在与:

CALL:只要调用其监视的方法,改POINTCUT就起作用

EXECUTION:侧重于方法的执行,要整个方法执行完了才开始匹配

有了JOIN POINT就可以定义POINTCUT了:pointcut outputLog() : call(public void helloWorld());pointcut 的完整定义<pointcut>::=<access_type><point_name>({parameters}):{designator[&& || ]};切点有点象注册一个事件.

当监视到了public void helloWorld()这个方法的执行就要发出通知,有点象FIRE哈

  before() : outputLog() {
    System.out.println("Before Call");
  }

起语法格式入下:

advice::=[return type] type of advice"(formails)" [thowstypelist]":"pointcut"[advice body]"

编译:

AJC Test.java TestAspect .java

java Test

运行结果:

Before Call
Hello World

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值