是否可以使用 Spring AOP(或 AspectJ)创建可重入方面?
这是一个例子:
@Log
public int calcFibonacci(int n) {
if(n <= 1) {
return n;
} else {
return calcFibonacci(n - 1) + calcFibonacci(n - 2);
}
}
看点:
@Aspect
public class LoggingAspect {
@Around("@annotation(log)")
public Object measure(ProceedingJoinPoint pjp, Log log) throws Throwable {
// log some relevant information from log annotation and pjp
...
return pjp.proceed();
}
现在我想知道 calcFibonacci 被调用了多少次(计算重复调用)。
有什么办法可以做到这一点吗?
最佳答案
您需要具备以下条件:
<aop:aspectj-autoproxy expose-proxy="true"/>
和计算值的类:
@Component
public class CalcFibonacci implements CalcFibonacciInterface {
@Log
public int calcFibonacci(int n) {
if(n <= 1) {
return n;
} else {
return ((CalcFibonacciInterface) AopContext.currentProxy()).calcFibonacci(n - 1)
+ ((CalcFibonacciInterface) AopContext.currentProxy()).calcFibonacci(n - 2);
}
}
}
相关文档部分是here .
关于java - Spring AOP 可重入方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24325015/