У меня есть много названных аннотированных экземпляров класса TabularResultSet, которые я хочу передать нескольким классам в статическое конечное свойство. Как это сделать? Я не думаю, что это нравится окончательный и статический характер собственности. Должен ли я вызвать инжектор непосредственно в объявлении свойства, чтобы присвоить значение?Inject Guice на статичное конечное свойство?
ответ
Можно ввести Guice в статические поля. См. Static Injections в документации Guice.
Но я не уверен насчет static final
. final
поля также несут гарантию, что они инициализируются ровно один раз (если не используется отражение). Guice может работать над этим, используя отражение (я знаю, что Guice может вводить поля @Inject private final
с использованием отражения), но это довольно грязное решение. Если значение поля всегда установлено за пределами статического блока инициализации (для static
) или конструктора (для полей не static
), то он не должен иметь final
.
Но даже если это возможно, это не очень хорошая идея. Статическое состояние противоположно инъекции зависимостей. Инъекционная инъекция основана на Голливудском принципе: «Не звоните нам, мы вам позвоним». Вы не должны найти значение от Guice, вы должны просто заявить, что вам это нужно, и Guice предоставит его вам.
- 1. Guice inject httpheaders
- 2. Inject guice dependency в классе non guice
- 3. Конечное свойство
- 4. Guice: @Inject at static fields
- 5. Guice: Inject ArrayList of Strings
- 6. Guice не инициализирует свойство
- 7. Как Inject реализации в Guice 4.0
- 8. ES6 статическое конечное свойство класса
- 9. Это анти-шаблон Guice?
- 10. Информация о @Inject в CDI/Weld и DI/Guice
- 11. Google Guice. Inject EJB при использовании Java EE5
- 12. Использование Inject в модуле с использованием Mapbinder в Guice
- 13. Guice: Inject mulitple реализация в конструкторе Single Class
- 14. Inject Util Class с Google Guice против статических методов?
- 15. Ошибка ввода класса с общим типом @Inject Guice
- 16. Как накладывать JavaScript на статичное изображение?
- 17. Guice: последствия инъекции поля
- 18. Миграция проекта на основе Guice на кинжал
- 19. Inject Spring определяет свойство в контроллере
- 20. Inject a TypeListener
- 21. Scala и @Inject аннотация
- 22. исключение интеграции Guice Guice
- 23. Guice 3.0 request.getRequestDispatcher (..) вперед предваряя путь Guice сервлет
- 24. $ inject Аннотация на angularjs
- 25. Inject Javascript на сайт
- 26. Можно ли аннотировать унаследованное конечное свойство с помощью @Autowire?
- 27. Как настроить HK2 для использования аннотации Guice @Inject из пакета com.google.inject?
- 28. Как сохранить конечное состояние анимации CSS и удалить свойство анимации?
- 29. изменение значения Guice например, на время выполнения
- 30. DbContext, Inject или To Inject?
hmmm ... многие из моих проектов классов часто включают класс, представляющий экземпляр чего-либо, и все экземпляры сохраняются в статической окончательной коллекции, которая импортируется из базы данных. Этот дизайн всегда был успешным для меня. Но, возможно, Guice здесь не работает или я не создаю оптимальную настройку. – tmn
У вас может быть коллекция, импортированная из базы данных, просто не делайте ее статической коллекцией. Вместо этого свяжите его с помощью модуля Guice и введите его там, где он вам нужен. Вы даже можете сделать Guice '@ Singleton', если вы хотите только один экземпляр, но если вы введете его в классы, которые в нем нуждаются (вместо того, чтобы искать его из статического поля), то вы можете заменить не- Singleton в будущем (или, что более полезно, в тестах). –
@ThomasN. если данные импортируются из базы данных, то вы хотите ввести класс, который обращается к данным (возможно, кэширование или ленивая загрузка), а не сами данные. Ваши модули Guice не должны делать что-то медленное, как доступ к базе данных – NamshubWriter