使用AspectJ仅拦截void返回调用

时间:2010-10-18 12:41:20

标签: aspectj void

我有一个应记录的跟踪方面:

  • 输入
  • 退出(返回类型无效)
  • 返回[返回的对象]
  • Throwinig [例外消息]

我遇到第二个问题。如何在没有双重记录所有退出的情况下为这个案例创建建议,就像现在我有一个@After建议和一个@AfterReturning(value =“publicMethodCall()”,returns =“o”)的情况一样。我可以以某种方式为void返回调用@AfterReturning建议,并且当它返回时仍然检索它的值是非空的(可能不是因为无法判断该方法是否返回null或返回类型是否为空)。

我猜,这应该很容易,但我看不出来......

1 个答案:

答案 0 :(得分:3)

使用建议会更简单。一个切入点/建议对。 (我在这里使用代码样式aspectj语法,因为我更喜欢它)。如果你需要,我可以翻译成@AspectJ风格:

Object around() : publicMethodCall() {
  try {
    Object result = proceed();
    log(result, thisJoinPoint);
    return result;
  } catch (Throwable t) {
    log(t, thisJoinPoint);
    throw t;
  }
}

此处,如果您的方法返回void,则result将为null