0

我正在使用 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 ;

}

@方面

@Around("pcTrxLogger()")
public Object logMethodCall(ProceedingJoinPoint joinPoint) throws Throwable {
    ...
    ...
    return null;
}

return response;我可以使用ProceedingJoinPoint轻松获得所有参数和 response( ),但我无法获得以下变量和对象。

  1. long nStartRequest = (new java.util.Date()).getTime();
  2. GlobalStatus 状态 = 新的 GlobalStatus();
  3. long nEndRequest = (new java.util.Date()).getTime();

我们如何在 aspect( logMethodCall()) 中获取这些变量和对象?

4

1 回答 1

1

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

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

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

于 2013-10-26T18:43:28.323 回答