Каков порядок привязки класса AbstractModule при использовании с Guice? - PullRequest
1 голос
/ 14 марта 2019

Вопрос, вероятно, более понятен на примере.

Я использую Guice для создания инжектора:

  val injector = Guice.createInjector(new Module)

со следующим классом Module:

class Module extends AbstractModule {

  override def configure(): Unit = {
    val instance = aCallToGetAnInstance()
    bind(classOf[DummyClass]).toInstance(instance)
    bind(classOf[DummyClass2]).asEagerSingleton()
  }

  @Provides
  @Singleton
  def provideDummyService: DummyService = {
    DummyService.standard.build()
  }

}

Какой из этих 3 связанных классов будет связан первым?

Этот вопрос, кажется, имеет смысл, если один из следующих вызовов вводит другой класс.

Спасибо за ваши ответы.

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Вот что делает Injection Framework для вас.

Пока в вашем коде нет какого-либо цикла, guice может его разрешить.

При запуске проверяются все привязки (например, еслиу вас есть циклы).Однако создание экземпляров происходит при необходимости (ленивый) - исключение составляет eager singleton.

Просто прокомментируйте, если я вас неправильно понял.

0 голосов
/ 14 марта 2019

Наличие @Provides и @Singleton для метода provideDummyService достаточно.Guice найдет методы, помеченные @Provides, и выполнит проводку за вас.Это делается с помощью Java Reflection.Нет необходимости добавлять что-либо в методе configure ().

https://github.com/google/guice/wiki/ProvidesMethods

...