Итак, я пишу несколько компонентов (которые будут упакованы как JAR), и все они используют Guice для DI. Эти компоненты являются просто повторно используемыми JAR-файлами типа "commons", которые будут использоваться другими последующими проектами.
Мое понимание с Guice заключается в том, что вы реализуете конкретный Module
и используете его для связывания объектов и, по сути, для настройки всех ваших DI. Насколько я понимаю, у вас должна быть одна фаза «начальной загрузки», когда создается инжектор Guice, а затем все зависимости, с которыми настроен модуль, затем извлекаются из этого инжектора с помощью injector.getInstance(SomeClass.class)
.
Это прекрасно работает в автономном приложении, у которого есть некоторая точка входа, где вы можете вызвать метод стиля init()
для последующей загрузки Guice, но в JAR без заголовка, у которого нет точки входа, я борюсь с пытаясь определить, когда / где / как запустить Guice.
Это будут JAR-файлы, живущие на пути к классам, и в любой момент времени внешняя сущность может вызвать и класс, и любой метод внутри них. Я подумал об использовании настройки «отложенной инициализации», где метод проверяет, были ли еще настроены его зависимости, и, если это так, запускает метод начальной загрузки.
Но это действительно ужасное решение! Частично, потому что это потребовало бы, чтобы у каждого класса был свой собственный Module
(что смешно), и это также загрязнило бы всю мою кодовую базу кодом, связанным с DI.
Я явно упускаю здесь некоторые основы Guice, иначе я не вижу, как Guice мог бы использоваться во всем, кроме приложения, где выполнение от начала до конца известно и контролируется. Любые примеры кода - огромный плюс! Заранее спасибо.