我正在開發基於OSGi的應用程序。在記錄我自己的OSGi框架功能時,我偶然發現了擴展束的概念。援引R4規範(OSGi R4):擴展bundle在OSGi框架中的含義
擴展束所能提供的框架 實施的可選部分或提供必須駐留在引導 類路徑上的功能。這些軟件包不能由正常的 導入/導出機制提供。引導類路徑擴展是必需的 ,因爲某些軟件包實現假定它們位於引導類路徑的 或要求所有客戶端都可用。引導類路徑擴展的 例子是 java.sql中的實現,如JSR 169
也許這只是我太傻了,但我有在理解概念的困難。我有幾個問題:
從我的理解看來,擴展束正在做的
org.osgi.framework.system.packages.extra
和org.osgi.framework.bootdelegation
(即com.sun.*
或sun.*
)的相同工作。我對嗎?如果不是,他們之間有什麼區別?你能告訴我一個擴展包的真實用例場景嗎?有些說:「除非你使用擴展包,否則你不能這樣做!」 Here某人已經試圖提供擴展套件的例子,但(至少對我來說)似乎可以通過調整
org.osgi.framework.system.packages.extra
和org.osgi.framework.bootdelegation
來實現相同的結果;
我知道已經有this SO answer但對我來說並沒有完全擊中點。
非常感謝您的回覆!
什麼?它是如此強大?你能告訴我一個代碼示例嗎?而且,通過*任何類*,它是否也包含了一個bundle私有實現中的類?即使是單身包? – Koldar
@Koldar是的,引導類路徑總是首先被選中。覆蓋引導類路徑中已有內容的唯一方法是將其添加爲擴展名。 –
哇,它似乎真的強大!但是,它不會打破模塊化嗎?有人可能會認爲不能以任何方式訪問實現,但通過擴展可以「捅他的鼻子」進入實現細節! (順便說一句,請在你的答案中添加一個代碼示例,我會很樂意接受你的回答) – Koldar