摘要: 擴(kuò)展(Extension)是很多可擴(kuò)展項(xiàng)目中一個(gè)關(guān)鍵的機(jī)制,可以利用擴(kuò)展向平臺(tái)添加新功能。但是擴(kuò)展不能隨意地創(chuàng)建,必須按照擴(kuò)展點(diǎn)(Extension Point)定義的規(guī)范進(jìn)行明確的聲明,平臺(tái)才能識(shí)別出這些擴(kuò)展。所謂擴(kuò)展點(diǎn),就是系統(tǒng)定義出來可以讓你擴(kuò)展的地方,可以認(rèn)為是一些擴(kuò)展的契約,而擴(kuò)展,這是你對(duì)這些擴(kuò)展點(diǎn)的實(shí)現(xiàn),當(dāng)然你自己的插件也可以定義擴(kuò)展點(diǎn)供別的開發(fā)人員擴(kuò)展。
閱讀全文
摘要: OSGI概念中主要分為了Bundle和Service,可以認(rèn)為Bundle是一個(gè)模塊的管理器,主要是通過BundleActivator管理模塊的生命周期,而Service則是這個(gè)模塊可暴露對(duì)外的服務(wù)對(duì)象,這里體現(xiàn)了OSGI和傳統(tǒng)的Plugin Framework不同的一個(gè)地方,管理和靜態(tài)結(jié)構(gòu)分開,在OSGI中通過在manifest.mf文件中增加一些內(nèi)容來發(fā)布Bundle,在其中描述了Bundle的提供商、版本、唯一ID、classpath、暴露對(duì)外的包、所依賴的包;每個(gè)Bundle擁有自己的ClassLoader以及context,通過context可進(jìn)行服務(wù)的注冊(cè)、卸載等,這些操作都會(huì)通過事件機(jī)制廣播給相應(yīng)的其他的Bundle;一般來說都為通過在Bundle中編寫初始需要注冊(cè)的服務(wù)的方法來完成Bundle可供外部使用的服務(wù)的暴露功能;如需要調(diào)用其他Plugin提供的服務(wù)可通過context的getServiceReference先獲取Service的句柄,再通過context.getService(ServiceReference)的方法獲取Service的實(shí)體。
閱讀全文