Сначала немного предыстории:
Я работаю над некоторым кодом прототипа веб-приложения на основе Apache Sling , который основан на OSGI и работает на Apache Felix. Я все еще относительно новичок в OSGI, хотя я думаю, что уже усвоил большинство концепций. Однако меня озадачивает то, что я не смог найти «полную» структуру внедрения зависимостей (DI ). Я успешно применил элементарный DI с помощью декларативных служб (DS ). Но насколько я понимаю, DS используются для ссылки --, как бы это сказать? --Службы и компоненты OSGI зарегистрированы вместе. И для этого он отлично работает, но я лично использую DI-фреймворки, такие как Guice , чтобы связать вместе целые графы объектов и поместить объекты в правильные области (думаю @RequestScoped
или @SessionScoped
, например ). Однако ни одна из специфических для OSGI платформ, которые я рассматривал, похоже, не поддерживает эту концепцию.
Я начал читать о схемах OSGI и iPOJO , но эти структуры, кажется, больше связаны с подключением сервисов OSGI вместе, чем с предоставлением полного решения DI. Я должен признать, что я еще не делал проб, так что мое впечатление может быть неверным.
Будучи расширением Guice, я экспериментировал с Peaberry , однако мне было очень трудно найти документацию,и хотя у меня заработал базовый DI, многие графические -расширенные функции сервлета (автоматическое внедрение в фильтры, сервлеты и т. д. )вообще не работали.
Итак, мои вопросы следующие:
Извините за довольно длинный вопрос.
Любая обратная связь очень ценится.
Обновления
Объемный впрыск:Внедрение с заданной областью — полезный механизм для автоматического внедрения объектов из определенного жизненного цикла. Подумайте, например, что часть вашего кода зависит от объекта сеанса Hibernate, созданного как часть фильтра сервлета. Отметив зависимость, контейнер автоматически перестроит граф объекта. Может быть, просто разные подходы к этому?
JSR 330 против DS:из всех ваших отличных ответов я вижу, что это две разные вещи. Это ставит вопрос, как быть со сторонними библиотеками и фреймворками, которые используют аннотации JSR 330 при использовании в контексте OSGI? Какой хороший подход? Запуск контейнера JSR 330 в Bundle?
Я ценю все ваши ответы,вы очень помогли!