如何添加"" AspectJ中的方法?

时间:2018-06-14 08:29:27

标签: java aspectj

我试图了解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,所以方面不起作用。 我做错了什么?

1 个答案:

答案 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 );
    }
}