Adobe AEM / OSGI:如何从任何类访问OSGI服务?

时间:2019-04-12 06:02:14

标签: osgi aem sling

我有一个服务(位于core / services内部)和服务实现(位于core / services / impl)。

我有一个扩展com.adobe.cq.sightly.WCMUsePojo的现有类(位于core / impl / view / components内部)。使用getSlingScripterHelper,此类可以访问我上面提到的服务。

我正在尝试不使用WCMUsePojo来访问服务。我该怎么办?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以直接从服务注册中心获得服务-

    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);

答案 1 :(得分:2)

您可以使用@Reference从任何其他类中调用服务,而无需使用WCMUsePojo。

class MyClass
{
    @Reference
    private MyService myService;

    void myMethod()
    {
      myServie.callYourServiceMethod();
    }
}

答案 2 :(得分:0)

您可以分享有关用例的更多详细信息吗?

如果要从HTL脚本支持bean访问服务,则可以使用Sling模型(而不是WcmUsePojo),并使用@Inject批注注入对服务的引用。