Пользовательский декоратор гобелена: не вызывается - PullRequest
0 голосов
/ 31 августа 2018

Следуя инструкциям здесь: http://tapestry.apache.org/tapestry-ioc-decorators.html, я создал собственный декоратор аннотаций следующим образом: и добавил его в модуль приложения

  @Decorate
  @TimeIt
  public static <T> T decorateTimer(Class<T> serviceInterface, T delegate,
      String serviceId, Logger logger,
      TimerDecorator decorator) {
    return decorator.build(serviceInterface, delegate, serviceId, logger);
  }

Я следовал тому же коду для TimerDecorator, что и в библиотеке Гобелена для LoggingDecoratorImpl

Тем не менее, когда я отмечаю службу (и / или метод внутри службы) с помощью @TimeIt, она не вызывается

Нужно ли "добавить" этот декоратор в какое-то приложение по умолчанию? Может кто-нибудь привести пример того, как я это сделаю?

Я также попробовал ту же идею с «Советниками», и это тоже не вызывается

  @Advise
  @TimeIt
  public static void adviseTimer(MethodAdviceReceiver receiver) {
    MethodAdvice advice = invocation -> {
      long start = System.currentTimeMillis();
      invocation.proceed();
      long end = System.currentTimeMillis();
      System.out.println(invocation.getMethod().getName() + " took: " + (end - start) + " [ms]");
    };
    receiver.adviseAllMethods(advice);
  }

EDIT

Когда я комментирую это следующим образом, вызывается мой декоратор

  @Decorate
  @Match("ASpecificManager")
  public static <T> T decorateTimer(...)

Так что мне интересно, что-то не так с интерфейсом TimeIt, который я написал?

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@UseWith(AnnotationUseContext.SERVICE)
public @interface TimeIt {
}

Вот как я это использую:

@TimeIt
public class ASpecificManagerImpl implements ASpecificManager {
...
}

РЕДАКТИРОВАТЬ # 2

похоже, что использовать его так работает

@Marker(TimeIt.class)
public class ASpecificManagerImpl implements ASpecificManager {
...
}

Тем не менее, это советует всем методам в классе ... Помещение его в конкретный метод класса по-прежнему советует ВСЕМ методам. Не могу ли я поместить эту аннотацию на конкретный метод класса (т.е. только на методы услуги я хочу на время)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...