Spring方面调用super.method()或inter方法调用无法执行方面代码

时间:2014-11-07 07:03:17

标签: java spring-aop

我正在使用spring方面的建议;     对于super.method()或类间方法调用,我无法调用我的方面代码;     这是我的代码示例。

//My aspect Class
@Aspect
public class MyAspect {

    @Around("execution(* in.test.project.service.myservice.create(..))")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
    //  . 
        //my logic
    //  .
}

public interface Myservice{
    void create(Myclass entity);
    void createObject(Myclass entity);
}

class myserviceImpl implements Myservice{
    public void create(Myclass entity) {
        // TODO Auto-generated method stub
    }
    void createObject(Myclass entity){
        create(entity);
    }
}

    class Mycontroller {
        void test(Myclass entity) {
            Myservice myservice = new myserviceImplimplements();
            // calls MyAspect code
            myservice.create(entity);

            // MyAspect not called
            myservice.createObject(entity);
        }

    }

1 个答案:

答案 0 :(得分:1)

这是使用Spring AOP的限制,而不会让您的代码知道它正在使用Spring AOP(您可以查看Spring的文档,了解如何执行此操作以及为什么您不应该{{3 }})。 Spring AOP是一个基于代理的系统,它区分代理对象本身(绑定到此)和代理后面的目标对象(绑定到目标),因此您还可以应用哪些类型的切入点。

Calls are made on the proxy

由于调用首先通过代理,然后是对象,因此在对象本身上调用在该对象上的对象内部进行的调用(如上面调用内部方法的调用)强>而不是代理。通过代理的调用可以委托给相关的拦截器,而由Object本身进行的调用不代理,因此Spring AOP不能像这样建议。我上面提供的链接显示了公开AopContext,但我强烈建议不要这样做。