5

私には 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

}

完全なコード:

https://github.com/rmalchow/debouncer-aspect/blob/master/src/main/java/com/skjlls/aspects/debounce/impl/DebounceAspect.java

https://github.com/rmalchow/lock-aspect/blob/master/src/main/java/com/skjlls/aspects/lock/impl/LockAspect.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
4

1 に答える 1