2012-06-21 62 views
2

我使用OSGi声明服务注册OSGi服务和设置服务工厂实现使用的声明式服务在OSGi的

服务工厂=“真”

如下。

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="test.Configuration"> 
    <implementation class="test.ConfigurationImpl"/> 
    <service servicefactory="true"> 
    <provide interface="test.Configuration"/> 
    </service> 
</scr:component> 

我想从另一个包中多次使用该服务。 但是,它返回的是同一个服务实例。

这里有什么可能出错?

回答

5

servicefactory标志表示每个消费者捆绑包获得一个单独的实例。所以如果你从2个捆绑包中使用服务,那么你将得到2个实例。你做而不是得到每个消费者多个实例。

如果您希望消费者对实例数进行编程控制,那么您需要使用ComponentFactory方法。

+0

我想同时使用来自同一个使用者的服务,但使用新的服务实例。 是否可以通过ComponentFactory的方法? – Ravish

+2

你可以像Neil说的那样使用ComponentFactory,但在这种情况下注册一个FooFactory也是一个好主意,它允许你保持在一个类型安全的世界。 –