日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > OSGI傳統注冊式服務與聲明式服務

OSGI傳統注冊式服務與聲明式服務

來源:程序員人生   發布時間:2016-07-11 13:23:07 閱讀次數:4569次

上1篇博文中我們編寫了第2個簡單的osgi的example,并編寫了1個接口DictionaryService,并在Activator這個Bundle中實現了這個interface,并在start啟動方法中進行了osgi服務的注冊,但并沒有使用這個服務,這1篇文章中其實不講授怎樣使用這個已注冊的服務,但是會講授服務的使用方式,1種為聲明式服務,1種為傳統注冊式服務,以下就是開始講授作甚osgi的注冊式服務與聲明式服務。


傳統注冊式服務

傳統方式下,我們注冊服務都是在bundle的激活器(Activator)中使用BundleContext.registerService()方法完成的。而服務的獲得需要通過BundleContext.getServiceReference()獲得ServiceReference實例,進而使用BundleContext.getService()得到真實的服務實例。這類方式雖然能夠完成服務的發布與使用,但是帶來1定的問題,具體以下:

  • 產生較多的樣板式代碼。OSGi的bundle是動態化的,伴隨著bundle的安裝和卸載,它所發布的服務也會動態地處于可用或不可用的狀態,因此每次使用服務的時候,我們都需要借助BundleContext對象去服務注冊中心查找,而不能通過1次查找,1勞永逸地持有服務對象的援用。雖然有ServiceListener和ServiceTracker幫助我們監聽和跟蹤服務的狀態,但是整體而言這類方式較為繁瑣且容易出錯。

  • 影響啟動時間,服務在激活器中注冊時,需要實例化所有要發布的服務對象,由于激活器的start()方法是同步調用的,所以會影響到全部利用的啟動時間。

  • 加大內存的占用,在激活器中注冊服務時,我們需要實例化所有的服務對象,但是這些服務在利用運行期間,其實不1定會用到,這在無形中加大了內存的占用。

  • API依賴引發的平臺侵入性。使用傳統方式注冊和使用服務,會用到大量的OSGi API,從而產生與OSGi平臺的耦合,如果要將代碼復用到非OSGi場景當中,需要較多的重構工作。

傳統的注冊式的服務寫起來繁瑣,并且問題比較多,因此1般都是使用聲明式服務來替換,以下就開始講授聲明式服務。

聲明式服務

osgi是通過聲明式服務來解決以上存在的問題的,聲明式服務中引入了兩個元素,構件(component)和元數據文件(metadata.xml)。構件是1個物理的、可替換的系統組成部份,它包裝了實現體且提供了對1組服務接口的實現方法。構件本身必須相容于接口且實現接口,接口表示了駐留在構件內的成份所實現的服務。這些服務定義了的1個整合的行動,并從1些構件實例提供給其它客戶端構件實例。在聲明式服務中1個構件就對應了某1個構件實現類,這個類相當因而1個pojo(普通的Java對象),在這個類中我們可以注冊服務、援用服務、構件屬性配置等1些滿足特定需求的操作,總之構件是服務的提供者和使用者。而元數據文件則是1個xml文件,在聲明式服務中所有的元數據文件名稱都為metadata.xml,在這個xml文件中我們可以根據需求配置構件的1些必須信息,且所配置的這些信息必須遵守聲明式服務元數據規范。
聲明式服務主要由4個部份組成,聲明式服務容器部份、元數據解析部份、代碼織入部份和打包成聲明式服務bundle的插件部份。

  • 聲明式服務容器—-用來解析部署到OSGi環境中的bundle,寄存所有已創建的服務構件實例和方面構件實例,并對其相應的配置信息、生命周期進行管理。
  • 元數據解析—-用來解析bundle中的元數據文件信息,使用SAX解析器將元數據文件中每個節點的信息都解析出來,構造成構件(component)或是構件實例(instance)供聲明式服務容器使用。
  • 代碼織入—-針對構件實現類進行的操作,主要是在構件實現類已實現的服務接口中增加1個pojo接口(用來獲得當前服務對象的構件實例,給某個字段注入值),并在相應的構件實現類基礎上生成以”WC “開頭的字節碼文件。
    -聲明式服務插件—-將構件所在工程打包成聲明式服務的bundle,在打包的進程中對構件實現類進行織入、對元數據文件進行解析并增強并在該bundle的manifest文件中添加與聲明式相干的頭標信息。

總結

這篇文章講授了傳統的注冊式服務和聲明式服務,注冊式服務在前面1篇的博文中有所提及,在后文中還是有相應的使用,但在聲明式服務上,后文中將會使用blueprint來代替,Blueprint規范來源于Spring Dynamic Modules項目,最早出現于R4.2企業規范當中。這個到了往后講授blueprint的時候再具體講授這些。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久一区二区三区 | 国产乱码精品一区二区三区不卡 | 久久亚洲国产精品 | 久久综合中文 | 黄色片网站 | 中文字幕1区2区3区 三级电影网址 | 欧美激情亚洲激情 | 欧美黄站| 高清国产一区 | 黄色在线观看视频网站 | 国产一区二区毛片 | 91香蕉视频官网 | 玖玖国产精品视频 | 成人免费观看在线 | 三级欧美| 250pp久久新 久久久免费精品视频 | 性爱免费视频 | 国内成人在线 | 精品国产一区二区三区成人影院 | 久久99精品久久久久久久青青日本 | 久久免费看 | 天天摸天天操天天干 | 日本一区二区视频在线 | 国产精品久久久久久久久久久免费看 | 精品一区二区久久久久久久网站 | 国产精品久久久久久久久免费看 | 亚洲成人久久久 | 国产真实夫妇6p酒店交换 | 99精品全国免费观看视频软件 | h片在线 | 视频一区在线播放 | 国产毛片在线 | 国产一区二区高清 | 日韩一级欧美 | 东北寡妇特级毛片免费 | 高清在线观看av | 欧美午夜一区二区 | 久草在线视频免赞 | 久久久国产精品 | 久久国产一区 | 精品国产91乱码一区二区三区 |