Какова связь между OSGi и Injection Dependency Injection

Что они друг друга?

  • Спецификация и реализация?
  • Конкуренты?
  • Unrelated?

Ответ 1

Они не связаны.

Edit:

DI conecpt, впервые описанный Martin Fowler, OSGi - это модульная система для Java, которая реализует полную и динамическую модель компонентов, указанную OSGi Alliance.

  • DI может использоваться на языках, отличных от Java, OSGi специфичен для Java
  • OSGi пытается решить проблему версий компонентов, DI является альтернативой старой схеме Locator.

Ответ 2

Спецификация OSGi состоит из двух разделенных частей: core и compendium.

Основная часть - это спецификация модульной системы Java. Таким образом, базовая спецификация не имеет отношения к понятию DI.

Компонентная часть, с другой стороны, указывает ряд услуг, которые может предоставить контейнер OSGi. Среди этих сервисов вы найдете "Декларативные сервисные спецификации" (OSGi Compendium Services, глава 112), которая является первой попыткой привести знакомую концепцию DI в OSGi. Идея проста: поскольку OSGi позволяет разработчику внедрять, определять и регистрировать службы, спецификация декларативных услуг дает разработчику возможность определять услугу, зависящую от ряда других базовых услуг. Это особенно интересная (и сложная) проблема в OSGi, поскольку услуги по определению ненадежны, и они могут появляться и исчезать.

Помимо спецификации декларативных услуг есть, по крайней мере, еще два популярных решения, пытающихся предоставить более мощную инфраструктуру DI в OSGi:

Стоит отметить, что в будущей версии спецификации OSGi R4.2 будет содержаться новая спецификация Compendium с именем Blueprint Services, которая предоставит полное решение DI для OSGi на основе структуры Spring DM (команда Spring сильно повлиял на эту новую спецификацию)

Ответ 3

Они концептуально связаны с тем, что они оба обеспечивают механизмы "разделения проблем".

OSGI делает это на уровне модуля - подумайте об архитектуре Eclipse с несколькими плагинами, каждый из которых несет ответственность за конкретную проблему/функцию.

DI ориентирован на уровне объекта - он предоставляет средства для построения приложений из нескольких объектов, соединенных вместе, причем каждый объект отвечает за его конкретные функции.

Технологически они разные. OSGI - это спецификация, которая имеет множество реализаций. DI использовался как шаблон проектирования с несколькими реализациями и API. Однако есть некоторые недавние работы в JCP, чтобы попытаться стандартизировать DI API (JSR 330)