使用Componentfactory创建一个唯一的服务实例,而不在OSGI中使用servicefactory

时间:2015-12-16 10:21:26

标签: java osgi apache-karaf service-factory

我正在尝试在OSGi中使用组件工厂。我的目的是使用Class B(工厂经理)创建A类实例,它作为工厂公开。 A类包含一些带有@Reference注释的服务,它们工作正常。 相同的方法用于C类,工厂(类似于A类),具有与@Reference相同的服务引用。

  1. 它会将同一服务对象返回给A类和A类。 C级?
  2. 如果是(对于问题1),服务工厂是否适用于A类和A类服务。 C类?(组件工厂内具有servicefactory属性的服务(A类和C类)
  3. 如果不是(对于问题1),有没有办法在A类和A类中获得唯一的服务对象。使用@Reference时的C类?
  4. 我可以使用新的运算符来实现A类和A类中的那些服务。 C类,但我期待某种DI方法。 DS中是否可以/可以实现?

1 个答案:

答案 0 :(得分:0)

ServiceFactory行为与DS无关。假设您没有在R6中使用新的PrototypeServiceFactory,那么为ServiceFactory服务创建多个gets的bundle将看到相同的服务对象。不同的bundle会看到不同的服务对象(假设ServiceFactory实现返回不同的对象)。

因此,如果A和C在同一个包中,它们将看到引用服务的相同服务对象,而与引用的服务是否为ServiceFactory无关。

如果您需要不同的服务对象,您应该查看在Core R6中添加并在DS 1.3中受支持的PrototypeServiceFactory。