В какие классы объекты вводит guice? - PullRequest
0 голосов
/ 08 сентября 2011

Возможно глупый вопрос, но ... У меня есть куча кодовой базы с классами, в которых есть аннотации @Inject.Но когда приложение запускается, не все объекты вводятся, некоторые значения равны нулю.

Итак, мой вопрос: как guice знает, какие классы должны быть обработаны?Это как-то пересекает граф объектов?

1 Ответ

0 голосов
/ 12 сентября 2011

Хотя вопрос не очень ясен, я попытаюсь прояснить некоторые ситуации, когда инъекция может произойти или не произойти, чтобы вы могли увидеть, с какой проблемой вы можете столкнуться:

  1. Есликласс A имеет поля @Inject, конструктор или методы, но непосредственно создается экземпляром new где-то в коде, тогда он обычно не вводится.

  2. На самом деле в ситуации выше, внедрениеможет произойти, если экземпляр был явно «помечен» для внедрения в Module, вызвав injectMembers().

  3. Если класс A имеет поля @Inject, конструктор или методы, ион создается Guice (либо с помощью Injector.getInstance(...), либо путем транзитивной инъекции в экземпляр, созданный Guice), тогда невозможно, чтобы внедренные поля были null, или инъецированные методы вызывались с null, кроме случаев, когда параметры былиявно объявлено @Nullable.Если Guice должен внедрить объект, зависимости которого не могут быть разрешены, он выдаст исключение.

Конечно, это упрощенное объяснение того, как Guice внедряет (или нет) материал.Что важно, так это пункт 3., который заставляет меня поверить, что экземпляры для введенных полей являются нулевыми, не были созданы Guice, но непосредственно созданы с помощью new.

...