我正在使用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);
}
}
答案 0 :(得分:1)
这是使用Spring AOP的限制,而不会让您的代码知道它正在使用Spring AOP(您可以查看Spring的文档,了解如何执行此操作以及为什么您不应该{{3 }})。 Spring AOP是一个基于代理的系统,它区分代理对象本身(绑定到此)和代理后面的目标对象(绑定到目标),因此您还可以应用哪些类型的切入点。
由于调用首先通过代理,然后是对象,因此在对象本身上调用在该对象上的对象内部进行的调用(如上面调用内部方法的调用)强>而不是代理。通过代理的调用可以委托给相关的拦截器,而由Object本身进行的调用不代理,因此Spring AOP不能像这样建议。我上面提供的链接显示了公开AopContext,但我强烈建议不要这样做。