AspectJ无法运行@Before建议

时间:2014-02-09 14:52:32

标签: java aop aspectj

美好的一天开发者。

我刚开始学习AspectJ AOP风格。 请帮我。我正在尝试了解LTW(加载时间编织),因为我对AspectJ的嵌套方法调用更感兴趣,并且代码如下:

包pkg.aop.target;

public class AppOut {


    public void methodOutside() {

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Invoking AppOut.methodOutside()");  

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }   
        methodInside();

       }


   public void methodInside() {



       System.out.println("Invoking AppOut.methodInside()");

        }



    public static void main(String[] args) {

        new AppOut().methodOutside();

    }

}

方面部分:

package pkg.aop.myaspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;


@Aspect
public class MyAspect {

    @Pointcut("call(* *.*(..))")
    void anyCallToMethod() {
    }


    @Before("anyCallToMethod()")
    public void beforeLogicAspect() {

        System.out.println("Should invoke before every method from AppOut class.");

    }

}

在我的JVM args中,我有:

-javaagent:C:\Users\Vadim\workspace\aspectjweaver-1.7.4.jar

当我运行时,我看不到任何运行方法调用建议之前,只看到我的方法消息。我做错了什么?

我的输出是:

Invoking AppOut.methodOutside()
Invoking AppOut.methodInside()

谢谢。

2 个答案:

答案 0 :(得分:0)

将切入点更改为

call(* *(..))

答案 1 :(得分:0)

pointcut anyCallToMethod(): execution(public void *(..) ) ;