Java 当被同一类的方法调用时,Spring方面不工作
我定义了一个方面(在spring项目中),该方面应该在方法执行后调用Java 当被同一类的方法调用时,Spring方面不工作,java,spring,aop,aspectj,spring-aop,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(..))")
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
这里出了什么问题?将切入点定义与其他asterix一起使用
@After("execution(* Crap.blah*(..))")
您是否正在使用Spring自己的AOP实现?这是一个已知的限制,在同一类中调用方法时不应用方面
通过将
放入xml文件(并导入所需的AspectJ依赖项),可以切换到AspectJ。Aspectj在您描述的场景中工作。我认为您应该使用call()而不是execution()。怎么做?修改了问题,似乎不是线程的问题。当同一类的方法调用切入点时,它似乎不会被触发。请参见此处以获取解释:autoproxy标记用于Spring AOP,正如您刚才解释的,它不适用于内部调用,因为它是基于代理的,并且对this
方法的调用不通过代理路由。我想你需要的是
。