Перехват только пустых обратных вызовов с использованием AspectJ - PullRequest
3 голосов
/ 18 октября 2010

У меня есть аспект трассировки, который должен регистрироваться:

  • Ввод
  • Выход (тип возврата недействителен)
  • Возвращение [возвращенный объект]
  • Throwinig [Сообщение об исключении]

У меня проблемы со вторым.Как создать совет для этого случая без двойной регистрации всех выходов, которые также возвращают что-то, как в случае с одним советом @After и одним @AfterReturning (value = "publicMethodCall ()", returning = "o"),Могу ли я как-то сделать так, чтобы совет @AfterReturning вызывался для пустых возвратов и все еще возвращал его значение, когда оно не является пустым (вероятно, не так, как было бы невозможно определить, вернул ли метод значение null или если возвращаемый тип был пустым).

Я, думаю, это должно быть легко, но я не вижу этого ...

1 Ответ

3 голосов
/ 20 октября 2010

Было бы проще использовать вокруг совета.Одна пара точек / советов.(Я использую здесь синтаксис стилей кода кодекса, потому что я предпочитаю его).Я могу перевести на стиль @AspectJ, если вам нужно:

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

Здесь, если ваш метод возвращает void, тогда result будет null.

...