Java 使用ProceedingJoinPoint获取aspectj中的对象和变量

Java 使用ProceedingJoinPoint获取aspectj中的对象和变量,java,spring,spring-mvc,aop,aspectj,Java,Spring,Spring Mvc,Aop,Aspectj,我正在使用Spring MVC+AspectJ @控制器 @RequestMapping(method = RequestMethod.GET, value = "/testLogger") @TrxLogger public String testLogger ( @RequestParam(value = "optimumid", required = false) String optimumid, @RequestParam(value = "system", requi

我正在使用Spring MVC+AspectJ

@控制器

@RequestMapping(method = RequestMethod.GET, value = "/testLogger")
@TrxLogger
public String testLogger (
    @RequestParam(value = "optimumid", required = false) String optimumid,
    @RequestParam(value = "system", required = false) String system,
    @RequestParam(value = "accountnumber", required = false) String accountnumber,
    @RequestParam(value = "csrid", required = false) String csrid,
    @RequestParam(value = "paymentAccountNumber", required = false) String paymentAccountNumber,
    @RequestParam(value = "dummyData", required = false) String dummyData,
    @UserSession Optional<Session> session,
    HttpServletRequest request) throws Exception {

long nStartRequest = (new java.util.Date()).getTime();

String response = null;
GlobalStatus status = new GlobalStatus();
try {
    response = billPayService.testLogger(optimumid, system, accountnumber, csrid, paymentAccountNumber, dummyData);
    status.setStatusCode("OK");
    status.setStatusDesc("SUCCESS");

}catch (Exception e) {
    response = "BillPayController.testLogger() FAILED!";
    status.setStatusCode("ERROR");
    status.setStatusDesc("FAILURE");
}

    long nEndRequest = (new java.util.Date()).getTime(); 

return response ;

}
我可以使用ProceedingJoinPoint轻松获取aspect中的所有参数和响应(
return response;
),但我无法获取以下变量和对象

  • 长nStartRequest=(new java.util.Date()).getTime()
  • GlobalStatus状态=新的GlobalStatus()
  • long-nEndRequest=(new java.util.Date()).getTime()
    我们如何在方面(
    logMethodCall()
    )中获得这些变量和对象?

    这些都是局部变量。除非将它们的值或引用传递给某个中间对象(如方法的返回值或存储在方法的某个参数中),否则无法访问它们

    请注意,如果这些变量不存在,您可能建议了其他一些方法,那么为什么可能获得它们呢


    另一种方法是在建议本身中创建这些值。它们似乎并不以任何方式依赖于您在控制器处理程序方法中所做的操作。

    感谢您的回复。实际上,每个控制器都有自己的局部变量或对象。有一件事也让我困惑,当在继续连接点中可以访问其他东西时,为什么不能访问呢。即使这个方法在连接点中公开,连接点也只能通过反射提供这么多。您可以访问
    方法
    对象(要调用)本身、调用它时传递的参数、返回的值(如果有)以及抛出的异常(如果有)。你怎么可能知道在这个方法或那个方法中创建的任何局部变量?这在Java中是不可能的。
    @Around("pcTrxLogger()")
    public Object logMethodCall(ProceedingJoinPoint joinPoint) throws Throwable {
        ...
        ...
        return null;
    }