跟我学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的时候来解决。
- 跟我学aspectj之五 ----- args带参数的pointcut
- 跟我学aspectj之四 ----- pointcut基础语法
- 跟我学AspectJ(五)
- 跟我学AspectJ(五)
- 跟我学AspectJ(五)
- 跟我学aspectj之十二 ----- 基于注解的Aspect
- 跟我学AspectJ
- 跟我学aspectj之六 ----- 插曲
- 跟我学aspectj之九----- advice
- 跟我学aspectj之十三 ----- AspectJ其他功能介绍
- 跟我学aspectj之十四----- AspectJ具体应用举例
- 跟我学aspectj之二 ----- 搭建开发环境
- 跟我学aspectj之三 ----- Hello World
- 跟我学aspectj之七 ----- call,execution,within,withincode
- 跟我学aspectj之八 -----控制流cfow,cfowbelow
- 跟我学aspectj之十 ----- Aspectj5支持Annotaion
- 跟我学aspectj之三 ----- Hello World
- 【第六章】 AOP 之 6.4 基于@AspectJ的AOP ——跟我学spring3
- Android利用ViewFlipper实现屏幕切换动画效果
- 跟我学aspectj之四 ----- pointcut基础语法
- HMPP_Tutorial_Labs_*中的错误纠正
- T-SQL高级篇(二)
- Android编程之手绘
- 跟我学aspectj之五 ----- args带参数的pointcut
- 跟我学aspectj之六 ----- 插曲
- Linux下的文件扩展名
- 顺序锁
- php异常处理
- 编程之美1.15——构造数独
- 跟我学aspectj之七 ----- call,execution,within,withincode
- 与 Task 有关的 Intent对象中设置的Flag总结
- object-c开发中混合使用或不使用ARC