2009-08-31 128 views

回答

9

它們在概念上相關,因爲它們都提供了「關注點分離」機制。

OSGI在模塊級別上做到了這一點 - 考慮Eclipse架構帶有多個插件,每個插件負責特定的關注點/功能。

DI面向對象層次 - 它提供了從多個連接在一起的對象中構建應用程序的方法,每個對象都負責其特定的功能。

從技術上講它們是不同的。 OSGI是一個具有多種實現的規範。 DI曾經是具有多種實現和API的設計模式。然而,JCP有一些最近的工作嘗試標準化DI API(JSR 330

13

OSGi規範由兩個分開的部分組成:核心和綱要。

核心部分是Java模塊系統的規範。因此,核心規範與DI的概念沒有關係。

另一方面,綱要部分指定了OSGi容器可以提供的一系列服務。 在這些服務中,您可以找到「聲明式服務規範」(OSGi Compendium Services,第112章),這是第一次將熟悉的DI概念引入OSGi。 這個想法很簡單:由於OSGi允許開發人員實現,定義和註冊服務,因此聲明式服務規範爲開發人員提供了定義依賴於一系列其他基礎服務的服務的可能性。這在OSGi中是一個特別有趣(而且很難)的問題,因爲服務在定義上是不可靠的,它們可以出現和消失。

除了聲明性服務規範,有至少兩個其他流行的解決方案試圖提供在OSGi的更強大的DI框架:

值得注意的是即將到來的R4.2版本的OSGi規範將包含一個新的概念這個名爲Blueprint Services的規範將爲基於Spring DM框架的OSGi提供完整的DI解決方案(Spring團隊已經對這個新規範做出了重大貢獻)