私には 2 つの側面があります。1 つは呼び出しの @Around でロックを取得するためのもので、もう 1 つはメソッド呼び出しをデバウンスするためのものです。側面は次のようになります。
@Pointcut("execution(public * * (..))")
private void anyPublicMethod() {}
@Around("anyPublicMethod() && @annotation(lock)")
public Object all(ProceedingJoinPoint proceedingJoinPoint, Lock lock) throws Throwable {
// acquire lock, then proceed()
}
もう1つは次のようになります。
@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)
それは、Spring AOPが次にコールするものを把握できないことに関連しているようです。実際のターゲットではなく、別の側面です.Spring AOP 2および3からの他のレポートを見てきました...しかし、私は使用しています:
spring 4.1.1.RELEASE