Ответ 1
"Компоненты" менее формально определены, чем сервисы.
Служба - это любой объект, который зарегистрирован в реестре службы OSGi и может быть просмотрен с использованием его имени (интерфейсов) интерфейса. Единственным условием является то, что служба должна реализовывать некоторый интерфейс... любой интерфейс. Например, я мог зарегистрировать исполняемый объект в интерфейсе java.lang.Runnable
, и клиенты могли искать его с помощью этого имени интерфейса.
"Компонент" имеет тенденцию быть объектом, управление жизненным циклом которого обычно осуществляется с помощью компонентной структуры, такой как декларативные службы (DS), Blueprint или iPOJO. См. эту страницу в Wiki сообщества OSGi для обсуждения различных доступных компонентов.
Компонент может иметь любую из следующих функций в комбинации или отдельно:
- Компонент может быть запущен и остановлен; это будет считаться "активным" компонентом, хотя это также неофициальный термин. Компонент, который не нужно запускать или останавливать, называется пассивным.
- Компонент может публиковать себя как службу OSGi.
- Компонент может связываться с или использовать службы OSGi.
В общем, использование инфраструктуры компонентов - это самый простой способ работы с службами OSGi, поскольку инфраструктура будет управлять привязкой к сервисам, которые вы хотите использовать. Например, вы можете сказать, что ваш компонент "зависит от" конкретной службы, и в этом случае компонент будет создан и активизирован только тогда, когда эта услуга будет доступна, а также будет уничтожена, когда услуга станет недоступной.