Osgi 获取ServiceReference的实现

Osgi 获取ServiceReference的实现,osgi,Osgi,我有一个ServiceReference,我想检查实现是否有注释。所以我需要得到实现类 我了解了如何获取服务实现的接口: ServiceReference<T> reference = // String[] interfaces = (String[]) reference.getProperty(org.osgi.framework.Constants.OBJECTCLASS); 但即使使用JavaDoc,我也无法明白如何在不从上下文获取服务的情况下获得实现,因为这可能是一个很

我有一个ServiceReference,我想检查实现是否有注释。所以我需要得到实现类

我了解了如何获取服务实现的接口:

ServiceReference<T> reference = //
String[] interfaces = (String[]) reference.getProperty(org.osgi.framework.Constants.OBJECTCLASS);
但即使使用JavaDoc,我也无法明白如何在不从上下文获取服务的情况下获得实现,因为这可能是一个很重的操作,我只需要类


如何从ServiceReference中获取实现?

您必须使用service=context.getServicereference获取服务。这不是一个沉重的操作

您还可以从使用ServiceTracker中获益。
除此之外,我很好奇你想达到什么目的。。也许有更好的方法。

那么您想在不获取服务对象的情况下获取服务对象吗?我想你是在要求一些不可能的事情。您需要让服务对象对其实现类进行内省,以便进行注释。没有别的办法。确保在完成后取消服务对象。

这不应该是一个繁重的操作,但我们正在尝试创建一个小容器,将EntityManager注入到我们的服务中,因此我不确定下周是否会出现这种情况。这就是为什么我不想干扰OSGi上下文的延迟加载,因为我想看看服务是否有一个注释,将其标记为please Injection in me。已有用于注入EntityManager的解决方案。参见ApacheAries jpa示例Jep,我们广泛地尝试了aries和Gemini,但它们都不能与Hibernate一起工作。因为我们实际上只需要EntityManager,所以我们决定自己做。Aries JPA与hibernate配合得非常好。hibernate团队甚至使用Aries JPA进行了OSGi集成测试。请记住,在从注册表获取服务之前,即使是OSGi服务注册表也不知道服务对象的实现类。这是因为提供者可能很晚才通过注册ServiceFactory来实例化服务对象。