2014-01-25 211 views
0

我剛開始玩OSGi服務,有以下情況。我有一個包含2項服務的項目。服務A需要服務B,所以我試圖注入依賴服務使用osgi依賴注入服務

@Inject 
private ServiceB svc; 

但框架不會注入。如果我設置了以下兩種方法在服務質量上 並設置這些方法爲「綁定/ undbind」在我的OSGi componentA.xml框架調用 這些方法,我可以在服務A.使用服務B

public synchronized void bind(IServiceB service) 
{ 
    this.svc = service; 
} 

public synchronized void unbind(IServiceB service) 
{ 
    if (this.svc == service) 
    { 
    this.svc = null; 
    } 
} 

問題是,爲什麼它不適用於@Inject?對不起,如果這是一個愚蠢的問題,我對整個話題都很陌生。提前謝謝了!

回答

0

看起來您正在使用Declarative Services,它不支持字段注入或JSR-330註釋。現場注射在OSGi中的實用性有限,其中服務可以在任何時候注入或「未注入」。方法注入通常更有用,因爲它使您有機會在發生這種情況時執行某些操作。

不過,我強烈建議您使用聲明服務的註釋。這將使您無需手動編寫component.xml。

+0

你好Neil,謝謝你的回答。我沒有提到它,但你當然是對的,我正在使用DS。您能否進一步解釋「DS的註釋」的含義?到目前爲止,我所做的是生成一個component.xml並使用eclipse編輯器設置所需信息(就像清單編輯器一樣,只需點擊幾下鼠標即可將服務接口設置爲實現類)。提前謝謝了! – paddy3k

+0

所以再次猜測一下,你建議你使用Eclipse PDE(插件開發環境)?哎喲哎喲。這會給你帶來很多痛苦。在PDE中,你基本上不能生成*任何東西*,並且必須手工完成。看一下bndtools教程(http://bndtools.org/tutorial.html),它應該特別提供關於註釋的概念,並且一般來說一個合適的工具可以讓你的生活變得更容易。 –

+0

我正在使用Eclipse JEE版本。感謝bndtools提示,我會進一步調查!起初我認爲這些註釋是OSGi「開箱即用」的。我認爲這個問題已經足夠清楚了,並且再次感謝你! – paddy3k