2013-02-12 58 views
2

實例化OSGi服務我具有其中我有以下組分的OSGi模塊化系統:發佈非@與iPOJO

  • 一些具體協議實例實現方式中,其代表通過specfic協議的特定服務器的連接(實例化每個連接服務)
  • 一些具體協議實例管理器服務,創建和預先配置按需實例(多個singletone服務從中,通常,不同的包)
  • ,其聚合協議管理服務,並要求他們提供協議實例連接管理需要的時候(單singletone服務)

它們被打包到OSGi包如下:

`-ConnectionManager 
     `-ConnectionManager.class 
`-IrcProtocol 
     `-IrcProtocolManagerService.class 
     `-IrcProtocolInstance.class 
`-XMPPProtocol 
     `-XMPPProtocolManagerService.class 
     `-XMPPProtocolInstance.class 

ConnectionManager標註有

@Provides 
@Instantiate 
@Component 

並實現Subscriber接口,enbles它具有發送和收聽郵件的能力,可以輸入某種類型的Event Admin


每個*ProtocolManager標註有

@Provides 
@Instantiate 
@Component 

並實現ProtocolManager接口,這使得它的發現由ConnectionManager服務偵聽器。


每個*ProtocolInstance是annoteted與

@Provides 
@Component 

,並實現Subscriber接口。它還實現了ProtocolInstance接口,它提供瞭如connect()disconnect()這樣的通用連接操作。


這裏的問題是,ProtocolInstance S被手工製作,用new運營商的ProtocolManager內,而不是由@Instantiate註釋觸發,正因爲如此 - 不參與iPOJO服務發佈,儘管這是@Provides註釋。


的問題是:如何正確(最好聲明,與註解)發佈該程序創建ProtocolListener服務,而無需手動潛入原OSGi服務發佈(至少外一些工廠,也許)?或者,也許,如何重新構建我的系統,以便更好地與無聲的iPOJO指南一起玩呢?

回答

1

iPOJO不支持用'new'創建對象。事實上,一個iPOJO實例不僅是這個對象,而且是容器包裝它。

但是,有兩種解決方法:

創建實例