Adobe AEM / OSGI: как получить доступ к сервису OSGI из любого класса? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть служба (расположена в ядре / services) и реализация службы (находится в ядре / services / impl).

У меня есть существующий класс (расположенный в core / impl / view / components), который расширяетсяcom.adobe.cq.sightly.WCMUsePojo.Используя getSlingScripterHelper, этот класс может получить доступ к службе, о которой я упоминал выше.

Я пытаюсь получить доступ к службе без использования WCMUsePojo.Как я могу это сделать?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 12 апреля 2019

Вы можете получить услугу прямо из реестра услуг -

    final Bundle bundle = FrameworkUtil.getBundle(this.getClass());
    final BundleContext bundleContext = bundle.getBundleContext();
    ServiceReference<MyService> ref = bundleContext.getServiceReference(MyService.class)
    MyService myService = bundleContext.getService(ref);
    // use the service
    bundleContext.ungetService(ref);
2 голосов
/ 12 апреля 2019

Вы можете использовать @Reference для вызова службы из любого другого класса без использования WCMUsePojo.

class MyClass
{
    @Reference
    private MyService myService;

    void myMethod()
    {
      myServie.callYourServiceMethod();
    }
}
0 голосов
/ 12 апреля 2019

Если вы хотите получить доступ к сервису из компонента поддержки сценария HTL, вы можете использовать Sling Model (вместо WcmUsePojo) и вставить ссылку на ваш сервис, используя аннотацию @Inject.

...