Внедрение зависимостей в MethodInterceptor - PullRequest
5 голосов
/ 16 апреля 2011

У меня есть MethodInterceptor с зависимостями. Как я мог ввести их?

Здесь , в 2007 году Боб Ли сказал, что эта возможность должна быть включена в следующий выпуск, но я не могу найти API для этого. bindInterceptor метод требует экземпляров вместо классов.

1 Ответ

12 голосов
/ 16 апреля 2011

Из Guice FAQ :

Чтобы добавить зависимости в AOP MethodInterceptor, используйте requestInjection() вместе со стандартным вызовом bindInterceptor ().

public class NotOnWeekendsModule extends AbstractModule {
  protected void configure() {
    MethodInterceptor interceptor = new WeekendBlocker();
    requestInjection(interceptor);
    bindInterceptor(any(), annotatedWith(NotOnWeekends.class), interceptor);
  }
}

Другой вариант - использовать Binder.getProvider и передать зависимость в конструкторе перехватчика.

public class NotOnWeekendsModule extends AbstractModule {
  protected void configure() {
     bindInterceptor(any(),
         annotatedWith(NotOnWeekends.class),
         new WeekendBlocker(getProvider(Calendar.class)));
  }
}
...