我试图了解AspectJ的工作原理。首先,我想添加一个名为after
的方法,使用AspectJ调用通常存在的方法。
myClass可以在下面看到:
package myclass;
public class MyClass {
public void method1(){
System.out.println("methode1 is called");
}
public void method2(String str){
System.out.println("methode2 is called " + str);
}
}
在method2之后我想显示一些短信和参数str
:
package myclass;
public aspect aspect2 {
pointcut func(String str):
call(myclass.MyClass.method2(String)) && args(str);
after(String str) : func(str) {
System.out.println("Aspect from method2: " + str );
}
}
最后要称之为主要课程entrypoint
:
package myclass;
public class entrypoint {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyClass mc = new MyClass();
mc.method1();
mc.method2("zzz");
}
}
作为输入,它显示:
methode1 is called
methode2 is called zzz
它没有显示Aspect from method2: zzz
,所以方面不起作用。
我做错了什么?
答案 0 :(得分:0)
我发表评论作为答案,因为@kriegaex问。
你在代码中有一些错误:
1.在切入点中你忘了添加返回类型,即使它是无效的你应该指定它。
2.在建议中添加返回after(String str) returning : func(str)
package myclass;
public aspect aspect2 {
pointcut func(String str): call(void myclass.MyClass.method2(String)) && args(str);
after(String str) returning : func(str) {
System.out.println("Aspect from method2: " + str );
}
}