有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这是我的代码片段:

@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) 个答案

  1. # 1 楼答案

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

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

    如果您需要这样做,显然有一些变通方法,但我不推荐这样做您可以在某些类中使用static{a1},并将其值设置为diff的任何值。然后,您可以在其他任何地方访问该ThreadLocal