当由同一个类的方法调用时,Spring Aspect不起作用

时间:2014-12-24 10:22:14

标签: java spring aop aspectj spring-aop

我定义了一个方面(在spring项目中),它应该在执行方法后被调用。

class Crap {
   public void blah(){
       //Do Something here
   }

   public void blah_internal(){
       blah();
       //Do Something else here
   }
}

class MyAspect {
   @After("execution(* Crap.blah(..))")
   public void doSomething(JoinPoint joinPoint) {
      System.out.println("Coming into the aspect");
      //Some logic here
   }
}

现在,如果我正常调用Crap.blah方法,则方面可以正常工作

new Crap().blah(); //Prints "Coming into the aspect"

但是如果我使用其他方法调用该方法,它就不起作用

new Crap().blah_internal();   //Prints nothing

这里出了什么问题?

2 个答案:

答案 0 :(得分:0)

将切入点定义与其他asterix一起使用

@After("execution(* Crap.blah*(..))")

答案 1 :(得分:0)

您使用的是Spring自己的AOP实现吗?这是一个已知的限制,在同一个类中调用方法时不应用方面。

您可以通过将<aop:aspectj-autoproxy />放入xml文件(并显然导入所需的aspectj依赖项)来切换到AspectJ。 Aspectj适用于您描绘的场景。