大胡子的博客

写点JAVA,爱好scala,喜欢感悟生活

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


  上一节,我们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的时候来解决。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zl3450341/article/details/7673954
文章标签: java string class
个人分类: 跟我学Aspectj
所属专栏: aspectj
上一篇跟我学aspectj之四 ----- pointcut基础语法
下一篇跟我学aspectj之六 ----- 插曲
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭