Могу ли я иметь метод Guice @Provides в классе, который не расширяет AbstractModule? - PullRequest
0 голосов
/ 30 апреля 2020

Моя задача проста. Можно ли создать метод @Provides в классе, который не расширяет AbstractModule?

 @Provides
    public int someMethod() {
        return someValue;
    }

Могу ли я иметь что-то подобное в классе, который не расширяет AbstractModule, или он всегда должен быть в класс guicemodule?

1 Ответ

1 голос
/ 30 апреля 2020

Да, вы можете, но ваш класс должен реализовать Module.

Технически, все это Module, поэтому Guice должен идентифицировать его как таковой. Guice рассчитывает запустить на нем configure(Binder).

Вот как вы это сделаете:

public class MyModule implements Module { // See? No AbstractModule
  @Provides
  public int someMethod() {
    return someValue;
  }
  @Override public void configure(Binder binder) {}
}

Если вам нужен просто фиктивный класс без каких-либо требований реализации для хранения всех ваших модулей, тогда в настоящее время вам не повезло, поскольку это невозможно.

Однако, начиная с Guice 4.1, вы можете написать следующее, не прибегая к реализации configure(Binder), что не так уж и плохо:

public class MyModule extends AbstractModule {
  @Provides
  public int someMethod() {
    return someValue;
  }
}
...