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 楼答案
目前,不是。
diff
变量是一个局部变量,因此只有在声明(并初始化)之后,才能在方法体中访问它AOP建议是指在程序执行的某一点添加额外的行为(通过执行代码)。它是一个独立的组件。它可以知道它所截取的代码,但反之亦然
如果您需要这样做,显然有一些变通方法,但我不推荐这样做您可以在某些类中使用
static
{a1},并将其值设置为diff
的任何值。然后,您可以在其他任何地方访问该ThreadLocal