aspectJ 简单例子

1.下载
[url=http://www.eclipse.org/aspectj/downloads.php#stable_release]http://www.eclipse.org/aspectj/downloads.php#stable_release[/url]下载AspectJ的最新稳定版本

2. 安装是java -jar aspect-1.6.9.jar
安装后配置好path跟classpath可以直接使用ajc命令
这里没有安装,直接解压了

3.两个测试类
HelloWorld.java

package aaa;
public class HelloWorld {
public static void deliver(String message) {
System.out.println(message);
}

public static void deliver(String person, String message) {
System.out.println(person + ", " + message);
}

public static void round(String s){
System.out.println(s);
}
}

Test.java

package aaa;
public class Test {
public static void main(String[] args) {
HelloWorld.deliver("Wanna learn AspectJ?");
HelloWorld.deliver("Harry", "having fun?");
HelloWorld.round("round");
}
}


4. 编译,运行
java -cp aspectjtools.jar;aspectjrt.jar;classes org.aspectj.tools.ajc.Main -d classes src/aaa/*.java
java -cp classes;aspectjrt.jar aaa.Test

结果
[quote]
Wanna learn AspectJ?
Harry, having fun?
round
[/quote]
5. 加入切面,编译运行
MannersAspect.java

package aaa;
aspect MannersAspect {
// 定义切点 并且指明在哪个方法
pointcut deliverMessage() : call(* HelloWorld.deliver(..));

pointcut afterMessage() : execution (* HelloWorld.deliver(..));

pointcut roundMessage(String s) : call (* HelloWorld.round(String)) && args(s);
// 方法前拦截
before() : deliverMessage() {
System.out.println("before! ");
}

// 方法后拦截
after() : afterMessage(){
System.out.println("after! ");
}

void around(String s) : roundMessage(s) {
System.out.println("around before! ");

proceed("99 "+s+" 00 ");
System.out.println("around after! ");
}

}


java -cp aspectjtools.jar;aspectjrt.jar;classes org.aspectj.tools.ajc.Main -d classes src/aaa/*.java
java -cp classes;aspectjrt.jar aaa.Test

结果
[quote]
before!
Wanna learn AspectJ?
before!
Harry, having fun?
around before!
99 round 00
around after!
[/quote]

6. call 与 execution的区别
call是在调用方法的地方加入切点,会修改Test类
execution是在方法执行的地方加入切点,会修改HelloWorld类

call的切面需要aspect与call调用的类都重新编译,MannersAspect与Test要重新编译
execution需要aspect与方法定义的类重新编译,即MannersAspect与HelloWorld要重新编译
如果对应的类没有重新编译,则切面不会生效
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值