代码之家  ›  专栏  ›  技术社区  ›  Kristofer

使用AspectJ只拦截void返回调用

  •  3
  • Kristofer  · 技术社区  · 15 年前

    • 套房
    • 退出(返回类型为void)
    • 返回[返回的对象]
    • Throwinig[异常消息]

    我对第二个有问题。如何在不重复记录所有出口的情况下为这个案例创建一个通知,当我有一个@After通知和一个@After return(value=“publicMethodCall()”,returning=“o”)时,所有出口也返回一些内容。我能不能让@AfterReturning通知在void返回时被调用,并且在它返回非void时仍然检索它的值(这可能不是因为无法判断方法返回的是null还是返回类型是void)。

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

    1 回复  |  直到 15 年前
        1
  •  3
  •   Andrew Eisenberg    15 年前

    使用周围的建议会更简单。一个切入点/建议对。(我在这里使用代码风格的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 .

    推荐文章