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

原创 2012年06月18日 17:09:41


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


版权声明:本文为博主原创文章,未经博主允许不得转载。

spring AOP pointcut 详细用法

1.首先这是我几天来对切面的编程的理解,之前有稍微学了下 spring切面的编程,spring中事物处理常常与pointcut相结合。 pointcut的注解类型 我就不多说了 。具体可以看sprin...

Spring AOP中使用args表达式访问目标方法的参数

如果只要访问目标方法的参数,Spring还提供了一种更简单的方法:我们可以在程序中使用args来绑定目标方法的参数。如果在一个args表达式中指定了一个或多个参数,则该切入点将只匹配具有对应形参的方法...

Spring AOP中pointcut expression表达式解析

Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. arg...
  • kkdelta
  • kkdelta
  • 2012年04月09日 17:36
  • 124666

aspectJ获得切点的参数

aspectJ获取切点参数

AspectJ 切面获取参数名称和参数

AspectJ 获取参数名称和值   after () : serviceAuthCheckAnnotatedMethods(){ Object[] paramValues ...

@Pointcut的用法

在Spring 2.0中,Pointcut的定义包括两个部分:Pointcut表示式(expression)和Pointcut签名(signature)。让我们先看看execution表示式的格式: ...
  • Java18
  • Java18
  • 2012年05月03日 01:11
  • 39135

AOP编程中注解参数详解

@Pointcut("execution(*transfer(..))") private void anyOldTransfer() {} 切入点指定者的支持 Spring AOP 支持...

AspectJ 切面获取方法参数并拿到具体的值

反射获取方法参数的值(需要配合切面,单单的反射是静态的获取不到方法参数的值,所以需要切面进行代理,这样就能获取到代理的参数也就和方法参数是一样的,这样就可以获取到方法参数的值了)...

spring aop五种通知及通知中传递参数!

定义切面(包含五种通知): import org.aspectj.lang.ProceedingJoinPoint; public class MyXmlServiceAop { pub...

AspectJ的切入点表达式---execution表达式详解

Aspectj切入点语法定义在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut”切入点”例如定义切入点表达式 execution (* com....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:跟我学aspectj之五 ----- args带参数的pointcut
举报原因:
原因补充:

(最多只允许输入30个字)