日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java模块化之路 —— OSGI介绍

發(fā)布時(shí)間:2025/3/21 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java模块化之路 —— OSGI介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.初識(shí)OSGI

OSGI的全稱(chēng)是Open Service Gateway Initiative,直接翻譯過(guò)來(lái)理解很費(fèi)勁。為了理解這個(gè)問(wèn)題,我們先看看OSGI的設(shè)計(jì)目的與實(shí)現(xiàn)特點(diǎn)是什么。

在傳統(tǒng)Web開(kāi)發(fā)中,我們?yōu)榱诉M(jìn)行功能的分離,經(jīng)常會(huì)進(jìn)行模塊劃分,比如基礎(chǔ)信息模塊交由A和B做,接口信息模塊交由C和D做。最終,再匯集到一起,組成一個(gè)完整的項(xiàng)目。在這整一個(gè)流程中,我們做到的只是邏輯上的解耦,最終這些模塊還是運(yùn)行于同一服務(wù)器上,共享同一個(gè)classpath。這時(shí)就會(huì)出現(xiàn)一個(gè)局限性問(wèn)題,比如現(xiàn)在接口規(guī)范改了,我只想停掉接口信息模塊,而基礎(chǔ)信息模塊仍能正常運(yùn)行,這顯然是無(wú)法實(shí)現(xiàn)的。

而使用OSGI可以完美解決這個(gè)問(wèn)題,OSGI是基于模塊(Bundle)驅(qū)動(dòng)的,每個(gè)模塊都有屬于自己的classpath和類(lèi)加載器,模塊之間通過(guò)包暴露和引入進(jìn)行關(guān)聯(lián),每個(gè)模塊有著自己獨(dú)立的生命周期,我們可以動(dòng)態(tài)地對(duì)模塊進(jìn)行加載、卸載、更新。如此看來(lái),OSGI可以用一句話(huà)描述,就是一個(gè)為Java提供的動(dòng)態(tài)模塊化的系統(tǒng)。

2. OSGI中模塊的生命周期

在OSGI中,每個(gè)Bundle有著下列六種狀態(tài),狀態(tài)圖如圖2-1所示:

? INSTALLED — 成功安裝Bundle。

? RESOLVED — 所有Bundle需要的Java類(lèi)可用。這個(gè)狀態(tài)標(biāo)志著 bundle已經(jīng)是啟動(dòng)就緒或者是已經(jīng)停止。

? STARTING — 正在啟動(dòng)Bundle。調(diào)用了Bundle激活器的start方法,而且還沒(méi)有從方法中返回。

? ACTIVE — Bundle已經(jīng)啟動(dòng)完畢,正在運(yùn)行中。

? STOPPING — 正在停止Bundle。調(diào)用了Bundle激活器的stop方法,而且還沒(méi)有從方法中返回。

? UNINSTALLED — Bundle已經(jīng)卸載完畢,不能進(jìn)入其他狀態(tài)。

圖2-1 Bundle生命周期狀態(tài)圖

3. OSGI與SOA

通過(guò)前面的說(shuō)明,我們可以發(fā)現(xiàn),OSGI可以看成是一個(gè)服務(wù)發(fā)布規(guī)范,每個(gè)模塊可以看成是一個(gè)服務(wù)包,模塊可以進(jìn)行注冊(cè)、監(jiān)聽(tīng),模塊間通過(guò)暴露服務(wù)進(jìn)行聯(lián)系,很顯然,這是SOA的思想嘛。在OSGI RFC 119之前,OSGI只能運(yùn)用于單體架構(gòu),與主要用于分布式架構(gòu)的SOA有著本質(zhì)的區(qū)別,RFC 119增加了分布式領(lǐng)域規(guī)范,這使得OSGI適用于實(shí)現(xiàn)SOA。

4. OSGI現(xiàn)狀

OSGI目前在國(guó)內(nèi)只有為數(shù)不多的公司和項(xiàng)目有在使用,究其原因,還是它的弊端太大了。OSGI過(guò)于復(fù)雜,似乎每個(gè)程序員用過(guò)了都說(shuō)不好,主要問(wèn)題有以下幾點(diǎn):

(1)入門(mén)門(mén)檻高,OSGI規(guī)范多達(dá)幾十個(gè),并包含上千個(gè)API;

(2)增加系統(tǒng)不穩(wěn)定性,由于OSGI類(lèi)加載機(jī)制比較特別,經(jīng)常會(huì)出現(xiàn)不明原因的ClassNotFoundException等異常;

(3)應(yīng)用性不強(qiáng),運(yùn)用OSGI大部分是因?yàn)槠洹盁岵灏巍焙蚃ar隔離特性,但是,如果不是對(duì)動(dòng)態(tài)性要求特別高的項(xiàng)目,引入OSGI似乎只是徒增麻煩。

目前,OSGI的應(yīng)用更多的是因?yàn)槠淠K性和服務(wù)性,這與主流的微服務(wù)也是融合的,但是其復(fù)雜性使得它很難成為主流。

附阿里架構(gòu)師對(duì)OSGI的評(píng)價(jià):http://hellojava.info/?p=152



作者:Xx_hpeng
鏈接:https://www.jianshu.com/p/11dcea36b957
來(lái)源:簡(jiǎn)書(shū)
?

總結(jié)

以上是生活随笔為你收集整理的Java模块化之路 —— OSGI介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。