跟我学aspectj之五 ----- args带参数的pointcut

来源:互联网 发布:中国5g网络 编辑:程序博客网 时间:2024/04/30 19:53


  上一节,我们overview了一下pointcut的类型,怎么够多吧? 不夸张的说基本涵盖了Java程序的所有生命周期。这就以为着:我们可以控制到一个已经存在的Java程序的任何地方和环节。可能你还不太懂上一节的东西,或是懵懂。不要急,接下来,我会把常用的几个一一帮你介绍。但是本节,我们仍然要看基础语法。

 

  为了演示,我们要修改我们的HelloWorld.java。修改后的代码如下:

package com.aspectj.demo.test;public class HelloWorld {public static void main(int i){System.out.println("int the main method  i = " + i);}/** * @param args */public static void main(String[] args) {main(5);}}

我们增加了一个main(int i)的方法。再运行一下,发现拦截2次,也就是说:2个main()方法都被拦截,现在,leader说:我只要你拦截接受int参数的main()。怎么办?

那么我们修改一下HelloAspect。

pointcut HelloWorldPointCut() : execution(* com.aspectj.demo.test.HelloWorld.main(int));

再运行一下,发现只拦截了一次吧。


  可leader这人比较烦,他总是没完没了。他又说:我现在要获取main()方法里面的参数值。又加需求,广大同胞最痛恨的事情莫过于此。抱怨归抱怨,代码终归还得改吧,谁让我们吃这碗饭的勒。修改过后的代码如下:

    

    

package com.aspectj.demo.aspect;public aspect HelloAspect {pointcut HelloWorldPointCut(int i) : execution(* com.aspectj.demo.test.HelloWorld.main(int)) && args(i);   before(int x) : HelloWorldPointCut(x){  x+=5;  System.out.println("in the aspect   i = " +x);}}

赶紧运行一下。。看看结果~  发现是不是获取到了? leader又说了:我们要改变参数的值。可你也看到了,目前我们做的改变没有影响到main()方法啊。怎么办勒?这里我们先卖个关子,稍候我们介绍advice的时候来解决。


原创粉丝点击