跟我学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的时候来解决。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值