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

如何在AEM中获取OSGi服务的实例,而不使用@Reference注释?,aem,sling,Aem,Sling,我有一个工厂服务部- com.adobe.test.MyService 我在它的属性中配置了多个配置。 我想在我的任何类中使用一个特别配置的服务实例。 我可以像这样使用注释- @Reference("uniqueId=878") MyService myService 但是如果我想用吊带法怎么办- com.adobe.test.MyService myService = sling.getService(com.adobe.test.MyService.class); 我在哪里以及如何为我

我有一个工厂服务部-

com.adobe.test.MyService
我在它的属性中配置了多个配置。 我想在我的任何类中使用一个特别配置的服务实例。 我可以像这样使用注释-

@Reference("uniqueId=878")
MyService myService
但是如果我想用吊带法怎么办-

com.adobe.test.MyService myService = sling.getService(com.adobe.test.MyService.class);

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

对象sling是SlingRipper的一个实例,它的方法接受字符串作为第二个参数,表示过滤

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

请尝试此功能

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

基本上,您编写的代码与@theanubhava编写的代码没有区别。
MyService ms = getService(MyService.class);