我是AspectJ的新手......刚开始学习。
直到现在我能够在我的方面获得用户定义方法的参数,并在我的切入点中打印捕获的参数。
奇怪的是,我开始考虑在我的切入点的建议中打印System.out.println()
的内容,并编写以下简单的代码:
HelloClass.java:
public class HelloClass
{
public static void main(String a[])
{
System.out.println("hello sachin");
}
}
HelloAspect.java:
public aspect HelloAspect
{
pointcut callPointcut(String message ) :call(void java.lang.System.out.println(String))&& args(message);
before( String message) : callPointcut(message )
{
System.out.println("Fetced in point cut:"+message);
//System.out.println("In the advice attached to the call pointcut");
}
}
然后我使用ajc HelloClass.java HelloAspect.java
编译了两个文件
它编译成功的一个方面如下:
当我使用java HelloClass
运行程序时
输出为:Hello sachin
,其中应为Fetced in point cut:Hello sachin
。
所以任何人都可以指出我出错或丢失的地方。 。先感谢您 。
答案 0 :(得分:3)
我感到很震惊。发布后2天,没有人回答我这个问题...但是它很好我找到了解决方案并意识到我错了。这是我签署println方法()的错误。
这是println的正确签名:
void around(String str) :
call(void java.io.PrintStream.println(String)) && args(str)
它对我来说很好。
答案 1 :(得分:0)
从JRE捕获方法调用并不那么容易。
当你试图捕捉自己的方法时,更容易学习aspectj。 也许在HelloClass中定义自己的println方法,然后再试一次。
使用aspectj和jre类,你需要使用aspectj编译器重新编译jre类。
http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg09350.html