0

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

  1. 它会向 A 类和 C 类返回相同的服务对象吗?
  2. 如果是(对于问题1),服务工厂是否会为A类和C类的服务工作?(组件工厂内具有servicefactory属性的服务(A类和C类)
  3. 如果不是(对于问题 1),在使用 @Reference 时,是否有任何方法可以在 A 类和 C 类中获取唯一的服务对象,而不是工厂?
  4. 我可以分别对 A 类和 C 类中的那些服务使用 new 运算符来实现相同的目的,但我期待某种 DI 方法。在 DS 中是否可能/可实现?
4

1 回答 1

0

ServiceFactory 行为独立于 DS。假设您没有使用 R6 中的新 PrototypeServiceFactory,为 ServiceFactory 服务进行多次获取的包将看到相同的服务对象。不同的包将看到不同的服务对象(假设 ServiceFactory 实现返回不同的对象)。

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

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

于 2015-12-16T13:53:54.893 回答