2006 年得知 BMW 採用 OSGi 架構構建車載資訊娛樂系統:1000+ 模組,啟動僅 3.5 秒。這對 Java 框架意味著兩點:Java 執行效率不差、OSGi 效能極優。此后 OSGi 發展迅猛:BEA、Eclipse、Interface21 加入聯盟;EclipseCon 2007 成焦點;R4 規範寫入 JSR 291;Spring 2.5 宣稱全面相容;Sun 承諾 Java EE 7 重點考慮。OSGi 必將在企業應用大放異彩。
1999 年 OSGi 聯盟成立,初衷為嵌入式設備(機上盒、服務網關、手機、汽車)提供服務平台標準。後因優異特性延伸至桌面/伺服器開發。筆者認為:OSGi 是輕量、鬆耦合、面向服務的應用開發框架。
Eclipse 3.0 前有自有外掛體系,3.0 起遷移至 OSGi,自行實作 Equinox 框架。證明 OSGi 在效能、擴展性、二次開發上極大提升。圖示 Eclipse 與 OSGi 架構關係。


Bundle 熱插拔,修改單一 Bundle 不影響其他應用,容器無需重啟。對即時系統(如交易平台)至關重要,避免停機損失。Spring 2.5 + Spring-OSGi 終結「修改配置必須重啟」歷史。
核心僅數 JAR,Bundle 按需啟動,局部錯誤不波及全局,效能遠超傳統框架。
天然面向介面,Bundle 為獨立復用單元。雖遷移成本高(重構遺留工具箱),但長期受惠:企業 Bundle 庫支援快速組裝新應用,增強競爭力。
| 框架 | 特點 |
|---|---|
| Equinox | Eclipse 官方,最知名、更新最頻,實作 R4,提供 Web 伺服器、Servlet、JSP 等平台服務,推薦二次開發 |
| Knopflerfish | 早期優秀實作,R4 相容,含視覺化控制台、Eclipse 外掛,易於開發 |
| Felix | Apache 專案,社群活躍,更新快,R4 相容,提供基礎與擴展服務 |


`SayHello` 暴露介面包,其餘四 Bundle 引入。採簡化包依賴而非服務註冊方式演示。
Activator 註冊服務(以 `BobSays` 為例):
public void start(BundleContext context) {
serviceReg = context.registerService(SayHello.class.getName(), new BobSays(), null);
}
public void stop(BundleContext context) {
if (serviceReg != null) serviceReg.unregister();
}
服務消費者動態綁定(`SayHelloService` Activator):
ServiceReference ref = context.getServiceReference(SayHello.class.getName());
sayService.setSay((SayHello) context.getService(ref)); // 運行時決定具體實作
sayService.helloWorld();
啟動 5 個 Bundle + 核心,`ss` 查狀態,`start
OSGi 國外關注度高,國內推廣不足,可能因名稱過於抽象。本文從歷史、架構、價值、實作、環境部署、Hello World 實戰五維度入門,拋磚引玉。OSGi 深度知識(如 Declarative Services、Blueprint、分佈式 OSGi)待後續探索。