Феликс / OSGi: Как использовать компоненты SCR, не являющиеся службами OSGi?

SCR Apache Felix позволяет объявлять (через аннотации или XML) компоненты, которые затем будут созданы, подключены к их зависимостям и зарегистрированы как службы OSGi.

Также можно пропустить часть регистрации службы и просто заставить SCR создать компонент (указав @ scr.component, но опуская @ scr.service). Я думал, что это может быть полезно только для внедрения зависимостей (внутри пакета), но как использовать компоненты? Сервисы могут быть введены с помощью scr.reference, но это не работает для не-сервисов (или работает)?

Прямой доступ к SCR API работает, но прямой разговор с контейнерными службами как бы побеждает цель DI.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 505
1

Ответы 1

Я думаю, вы можете вводить только службы OSGI. Если вы хотите использовать инъекцию зависимостей, возможно, вам стоит проверить Google Guice. К сожалению, я не знаю, работает ли он из коробки внутри контейнера OSGI.

Что касается компонентов SCR, если компонент предоставляет функциональные возможности, которые вы хотите использовать в другом компоненте, я думаю, что его следует раскрыть с помощью службы.

Peaberry (code.google.com/p/peaberry) - это адаптация Guice для работы с OSGi.

xconspirisist 29.12.2011 20:20

DS отлично подходит для этого. «если компонент предоставляет функциональные возможности, которые вы хотите использовать в другом компоненте, я думаю, что он должен быть раскрыт с помощью службы» - именно так. Если вам нужна «внутренняя-связка-зависимость-инъекция», вам может потребоваться настроить Компонент с частным классом реализации (а не с общедоступным интерфейсом) в качестве предоставленной службы и ссылаться на эту службу из вашего пакета в другом компоненте. Таким образом, сервис находится в глобальном реестре сервисов, но никакой другой пакет никогда не получит к нему доступ, потому что он не сможет загрузить класс.

benjamin 15.07.2013 17:35

Другие вопросы по теме