如何在不使用@Reference注释的情况下在AEM中获取OSGi服务的实例?

时间:2015-12-03 12:06:51

标签: cq5 aem sling

我有工厂服务 -

com.adobe.test.MyService

我已经在其属性中配置了多个配置。 我想在我的任何一个类中使用特别配置的服务实例。 我可以使用像 -

这样的注释
@Reference("uniqueId=878")
MyService myService

但是如果我想使用像 -

这样的吊索方法呢?
com.adobe.test.MyService myService = sling.getService(com.adobe.test.MyService.class);

我在哪里以及如何为我感兴趣的特定实例定义唯一ID?

2 个答案:

答案 0 :(得分:3)

对象 sling 是SlingSriptHelper的一个实例,其方法getServices接受String作为第二个参数,代表过滤。

您可以找到此类过滤示例there。您可以在OSGi规范中找到过滤器语法的完整规范。

答案 1 :(得分:0)

请试试这个

static <T> T getService(Class<T> serviceClass) {
    BundleContext bContext = FrameworkUtil.getBundle(serviceClass).getBundleContext();
    ServiceReference sr = bContext.getServiceReference(serviceClass.getName());
        return serviceClass.cast(bContext.getService(sr));
}

然后你可以调用服务

MyService ms = getService(MyService.class);