Какая связь между OSGi и Dependency Injection - PullRequest
11 голосов
/ 31 августа 2009

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

  • Спецификация и реализация?
  • Участники
  • Unrelated

Ответы [ 3 ]

13 голосов
/ 01 сентября 2009

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

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

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

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

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

10 голосов
/ 31 августа 2009

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

Edit:

DI - это концепция , впервые описанная Martin Fowler , OSGi - это модульная система для Java, которая реализует полную и динамическую модель компонентов , указанную ОСГи Альянс .

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

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

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

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

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

...