本文為《你好,OSGi》系列第五部分,正式開啟 Spring 動態模組篇章。探討為何 Spring DM 對熟悉 Spring 配置、需挖掘 OSGi 模組化、版本控制與應用生命週期支援的開發者極具吸引力。
OSGi(Java 動態模組系統)為 Java 應用開發定義模組化方法與標準化模組管理相依性。OSGi 服務平台的 Spring 動態模組專案允許開發者構建可部署於 OSGi 容器的 Spring 應用。對熟悉 Spring 的 Java 企業開發者,Spring DM 是學習 OSGi 模組化開發的捷徑,除提供模組化架構與動態配置外,還處理大部分 OSGi 底層編程,讓開發者專注業務邏輯。
第一節介紹標準 OSGi 開發方式(OSGi API + Equinox),涵蓋架構、容器、Bundle 概念並開發首個 OSGi Hello World。本節將再次建構 Hello World,改用 Spring DM 框架,學習:
Spring DM 免除繁瑣機械工作與理解 OSGi 框架底層運作的困難,加速應用邏輯深耕。
OSGi 熱度急升:IBM WebSphere、BEA microService Architecture (mSA)、JOnAS 5 等應用伺服器已採用 OSGi 模組化框架。JBoss 開發基於 OSGi 的類載入器並計劃實作核心規範。Eclipse 基金會 Equinox 升級為頂級專案,成為新 Eclipse Runtime Initiative 基石。
OSGi 與 Spring 結合討論由來已久,催生 Spring Dynamic Modules for OSGi Service Platforms 專案。Spring DM 兩大核心功能:
org.springframework.osgi.bundle.extenderorg.springframework.osgi.bundle.coreorg.springframework.osgi.bundle.io傳統 Spring 應用:XML 配置檔定義資訊,啟動時建立應用程式語境對象實例化配置組裝物件。
Spring DM:啟動時 org.springframework.osgi.bundle.extender 掃描所有 Resolved 狀態 Bundle,判斷是否為 Spring 提供(含 Spring-Context Manifest 標頭或 META-INF/spring 下 XML)。發現則載入配置建立應用程式語境,檢查是否導出 OSGi 服務(將 Spring Bean 發布至共享服務登記處)、導入 OSGi 服務(尋找服務加入應用程式語境為普通 Spring Bean)。並註冊 Bundle 事件監聽器,新進入 Resolved 狀態的 Bundle 同樣處理。
下篇將從環境建置開始開發首個 Spring DM 應用,敬請期待!