Что такое аннотация @Service в Apache Felix? - PullRequest
3 голосов
/ 02 апреля 2019

Я прочитал несколько статей о разнице между @Service и @Component.Теперь я понимаю, что @Component - это пользователь, который комментирует объект как компонент OSGi, и его жизненный цикл будет управляться OSGi.Тем не менее, какова необходимость объявления объекта как службы с @Service, неизвестно.Что произойдет, если вы напишите свою бизнес-логику в объекте, который объявлен как компонент?

Я также хочу знать, что означает следующее утверждение:

Компоненты могут ссылаться / вызывать(используя внедрение контейнера - @Reference) другие сервисы, но не компоненты.Другими словами, компонент не может быть внедрен в другой компонент / сервис.Только сервисы могут быть внедрены в другой компонент.

1 Ответ

4 голосов
/ 03 апреля 2019
  • Вопрос 1:

    Что такое аннотация @Service в Apache Felix?

    http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#service:

    Аннотация @Service определяет, предоставляются ли и какие сервисные интерфейсы компонентом.

    Вы должны понимать, что речь идет о концепции Служба OSGi , а не о концепции Декларативной службы (DS), описанной с помощью @Component.

Избегайте использования аннотаций от SCR Феликса (пакет org.apache.felix.scr.annotations).

http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html:

Сами аннотации не поддерживаютсяновые функции от R6 или выше.Вместо этого предлагается использовать официальные аннотации OSGi для декларативных услуг.

Использовать @Component из пакета org.osgi.service.component.annotations, эта аннотация заменяет @Component и @Service из Феликса.

  • Вопрос 2

    Что произойдет, если вы напишите свою бизнес-логику в объекте, который объявлен как компонент?

    Происходит работаштраф.

  • Вопрос 3

    Я также хочу знать, что означает следующее утверждение:

    Компоненты могут ссылаться на /вызывать (используя внедрение контейнера - @Reference) другие сервисы, но не компоненты.Другими словами, компонент не может быть внедрен в другой компонент / сервис.Только сервисы могут быть внедрены в другой компонент.

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

БОНУС: Прочтите эту статью: https://medium.com/adobetech/using-the-osgi-declarative-service-in-aem-6-4-21102f649d54

...