2015-11-03 63 views

回答

1

tl; dr:你幾乎肯定不想使用ComponentFactory,所以我建議忽略它。

在我解釋服務工廠之前,重要的是要明白,OSGi中的大多數服務在概念上是單例。當你註冊一個服務時,你將一個Java對象放入註冊表中,並且該對象必須實現它已經註冊的接口。當客戶查找你的服務(使用它的接口)時,他們都會得到同樣的對象。

使用服務工廠,您可以註冊一個創建實現該接口的對象的工廠。 OSGi使用這個工廠創建一個新的實例,每個消費包使用。這很有用,因爲您現在可以爲每個消費包提供一個稍微不同的對象。例如,如果您正在實施日誌記錄服務,則使用服務工廠可以讓您跟蹤哪些軟件包正在調用日誌。

但是,服務工廠對消費者完全透明。它只是以正常的方式使用服務。這很好,但有時消費者需要程序控制,即消費者決定何時應該創建服務對象以及何時應該銷燬服務對象。這不適用於服務工廠。

部件工廠是提供這種程序控制的早期嘗試。我認爲它們已經過時了。它們不易使用,因爲您必須將提供者和使用者都與Declarative Services API耦合。

現在你應該使用prototype作用域的服務,在OSGi的版本6中引入的,我在博客這些here

+0

你的意思是說組件工廠是一個早期嘗試提供這種編程控制。這是通過組件工廠達成還是仍然公開?問題是我們沒有使用最新的osgi版本。所以我們不能使用OSGi Release 6中提到的示波器 – Shriram

+0

我不明白你的問題,你可以重新翻譯一下嗎?您是否確實需要消費者通過服務對象進行程序控制?這在實踐中很少需要。 –

+0

我的要求是爲組件創建組件工廠。我問過你的問題來自你發佈的答案。 ie)是否通過組件工廠進行編程控制?編寫組件工廠時還有一件事(工廠=「xxxx」),我使用'@service'和'@component'。工廠實施中@serivce的需求是什麼? – Shriram