2012-06-21 64 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也是一個好主意,它允許你保持在一個類型安全的世界。 –