如何使用AspectJ从@Around声明的方法获取值?

时间:2014-04-06 20:01:53

标签: java aspectj spring-aop

这是我的代码段:

@Around("execution(* de.my.package.path.controller.RecommendationController.recommendItems*(..))")
    public Object measureTimeWithOverhead(ProceedingJoinPoint joinPoint) throws Throwable {
        long startNanoTime = System.nanoTime();
        Object proceed = joinPoint.proceed();
        long endNanoTime = System.nanoTime();
        long diff = endNanoTime - startNanoTime;
        System.out.println("Elapsed time: " + (diff));
        return proceed;
    }

我想在我的进一步程序中使用“diff”变量的值。我该如何检索此值?这甚至可能吗?

(顺便说一句,我正在研究Spring 4.0.2 MVC应用程序)

1 个答案:

答案 0 :(得分:1)

目前,没有。 diff变量是一个局部变量,因此只有在声明(并初始化)之后才能在方法体内访问。

AOP建议旨在在程序执行的某个点添加其他行为(通过执行代码)。它是一个独立的组件。它可以知道它拦截的代码,但反之亦然。

如果您需要执行此操作,显然有解决方法,但我不建议。您可以在某些课程中使用static ThreadLocal并设置其任何diff都是值。然后,您可以在其他地方访问ThreadLocal