Java spring aop-链接多个方面

Java spring aop-链接多个方面,java,spring,aop,spring-aop,spring-aspects,Java,Spring,Aop,Spring Aop,Spring Aspects,我有两个方面,一个用于获取调用周围的锁@,另一个用于取消方法调用的绑定。这些方面如下所示: @Pointcut("execution(public * * (..))") private void anyPublicMethod() {} @Around("anyPublicMethod() && @annotation(lock)") public Object all(ProceedingJoinPoint proceedingJoinPoint, Lock lock)

我有两个方面,一个用于获取调用周围的锁@,另一个用于取消方法调用的绑定。这些方面如下所示:

@Pointcut("execution(public * * (..))")  
private void anyPublicMethod() {}

@Around("anyPublicMethod() && @annotation(lock)")
public Object all(ProceedingJoinPoint proceedingJoinPoint, Lock lock) throws Throwable {
   // acquire lock, then proceed()
}
@Pointcut("execution(public * * (..))")  
private void anyPublicMethod() {}

@Around("anyPublicMethod() && @annotation(debounce)")
public Object all(ProceedingJoinPoint proceedingJoinPoint, Debounce debounce) throws Throwable {
    // debouncing as described in 
    // http://stackoverflow.com/questions/4742210/implementing-debounce-in-java

}
另一个看起来像这样:

@Pointcut("execution(public * * (..))")  
private void anyPublicMethod() {}

@Around("anyPublicMethod() && @annotation(lock)")
public Object all(ProceedingJoinPoint proceedingJoinPoint, Lock lock) throws Throwable {
   // acquire lock, then proceed()
}
@Pointcut("execution(public * * (..))")  
private void anyPublicMethod() {}

@Around("anyPublicMethod() && @annotation(debounce)")
public Object all(ProceedingJoinPoint proceedingJoinPoint, Debounce debounce) throws Throwable {
    // debouncing as described in 
    // http://stackoverflow.com/questions/4742210/implementing-debounce-in-java

}
完整代码:

当我将@Debounce和@Lock放在一个方法上时,我得到了以下异常:

Required to bind 2 arguments, but only bound 1 (JoinPointMatch was NOT bound in invocation)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.argBinding(AbstractAspectJAdvice.java:584)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
这似乎与SpringAOP无法确定下一步要调用的内容有关,这是另一个方面,而不是实际的目标,我已经看到了SpringAOP2和SpringAOP3的其他报告。。。但我使用的是:

spring 4.1.1.RELEASE
对不起,我的英语很差。 你点了Aspect课程了吗?如果你没有,这个问题可能会发生

您可以尝试以下示例:

@Aspect
@Order(1)
public class FirstAspect(){}

@Aspect
@Order(2)
public class SecondAspect(){}

值越低,优先级越高

是否使用
pjp.procedure()
的惯例,除非您实际需要操作方法的参数?您正在
lockapect
yes中使用
pjp.procedure(pjp.getArgs())
。我试了两种方法。同样的例外。嗨。为什么会发生这种情况?我希望这两个方面都应该是完全透明的?