Я использую Guice для перехвата методов, когда они помечены конкретными аннотациями:
@GuiceWillInterceptThis
public void doSomething() {
// ...
}
Как выяснилось, большинство методов в этом проекте помечены @GuiceWillInterceptThis
, и становится неудобно оставлять теги method-after-method той же самой аннотацией, чтобы Guice знал, что их перехватывать. Было бы неплохо, если бы я мог как-то определить «шаблоны» методов для перехвата.
Например, было бы неплохо сказать " перехватывать только методы, возвращающие тип X внутри класса Y внутри пакета Z ".
Я делал это раньше в Spring & AOP Alliance, где я определил «pointcuts» (я думаю, что это правильная терминология AOP!) В XML и Spring Aps Alliance, чтобы связать правильный совет со всеми точки соединения в пределах этих определенных точек, например:
execution(public * *(..))
Я хотел бы сделать то же самое (поскольку Guice также использует AOP Alliance), но без использования Spring и без использования XML для определения точек.
Я скачал дистрибутив AOP Alliance и, похоже, не могу понять, как программно определять точки (на Java). Кроме того, я не знаю, где добавить такой код (может быть, модуль Guice?)
У меня есть ощущение, что мне может понадобиться использовать AspectJ для такой вещи, но у меня нулевой опыт с этим и я не хочу идти по этому пути, если некоторые ученые люди на SO не скажут мне, что это мой единственный вариант. (Что, кстати, если это так, может быть, добрая душа могла бы предоставить сверхбыстрый фрагмент кода, чтобы показать, как этого добиться в AspectJ?!?!)
Заранее спасибо за любые толчки в правильном направлении!