rma*_*how 5 java aop spring spring-aop spring-aspects
我有两个方面,一个用于获取@Around 调用的锁,另一个用于消除方法调用。这些方面看起来像这样:
@Pointcut("execution(public * * (..))")
private void anyPublicMethod() {}
@Around("anyPublicMethod() && @annotation(lock)")
public Object all(ProceedingJoinPoint proceedingJoinPoint, Lock lock) throws Throwable {
// acquire lock, then proceed()
}
Run Code Online (Sandbox Code Playgroud)
另一个看起来像这样:
@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
}
Run Code Online (Sandbox Code Playgroud)
完整代码:
和
当我将 @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)
Run Code Online (Sandbox Code Playgroud)
这似乎与 spring aop 无法弄清楚接下来要调用的内容是另一方面有关,而不是实际目标,而且我已经看到了 spring aop 2 和 3 的其他报告……但我正在使用:
spring 4.1.1.RELEASE
Run Code Online (Sandbox Code Playgroud)
抱歉我的英语不好。您订购了 Aspect Class 吗?如果你没有,这个问题可能会发生
你可以尝试这个例如:
@Aspect
@Order(1)
public class FirstAspect(){}
@Aspect
@Order(2)
public class SecondAspect(){}
Run Code Online (Sandbox Code Playgroud)
值越低,优先级越高
| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |