這回來(lái)分析一下OSGI的類加載機(jī)制。
先說(shuō)一下OSGI能解決什么問(wèn)題吧。
記得在上家公司的時(shí)候,經(jīng)常參與上線。上線一般都是增加了一些功能或者修改了一些功能,然后將所有的代碼重新部署。過(guò)程中要將之前的服務(wù)關(guān)掉,而且不能讓客戶訪問(wèn)。雖然每回的夜宵都不錯(cuò),但還是感覺(jué)這個(gè)過(guò)程很麻煩,很別扭。
為什么明明只修改了一部分代碼,卻都要重新來(lái)一遍。
OSGI架構(gòu)里面,很重要的一個(gè)理念就是分模塊(bundle)。如果你只是修改了一個(gè)模塊,就可以只熱替換這個(gè)模塊,不影響其它模塊。想想就很有吸引力。要實(shí)現(xiàn)這種功能,類加載的委派模型必須大改。像AppClassLoader --》ExtClassLoader --》BootstrapClassLoader這種固定的樹形結(jié)構(gòu),明顯不能擴(kuò)展,不能實(shí)現(xiàn)需求。
OSGI的規(guī)范要求每個(gè)模塊都有自己的類加載器,而模塊之間的依賴關(guān)系,就形成了各個(gè)類加載器之間的委派關(guān)系。這種委派關(guān)系是動(dòng)態(tài)的,是自由戀愛,而不是指腹為婚。。。。。。
當(dāng)然,委派是要依據(jù)規(guī)則的。這也好理解啊,談婚論嫁時(shí),女方的家長(zhǎng)肯定會(huì)問(wèn),有房嗎、有車嗎、有幾塊腹肌啊。哎,又扯遠(yuǎn)了。
當(dāng)一個(gè)模塊(bundle)的類加載器遇到需要加載某個(gè)類或查找某個(gè)資源的請(qǐng)求時(shí),規(guī)則步驟如下:
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26