java - Spring AOP 可重入方面

标签 java spring aspectj spring-aop aspect

是否可以使用 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/

相关文章:

java - AspectJ 构造函数强制工厂模式

Java:没有监视器的Thread.stop线程

java - 如何在 MockRestServiceServer 中模拟 http header ?

Java while 循环计时

java - Spring MVC : session beans from two different sessions

java - Spring Integration Kafka 适配器不产生消息

java - Micrometer TimedAspect 不会拦截对用@Timed 注释的方法的调用

java - 抽象父类(super class)中实现的超接口(interface)方法的方面

java - 跳过@Before 进行测试 ||有没有办法在 TestRule 中执行 @Before 方法?

java - 如何允许 itext pdfTable 中的列溢出