這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)jarslink1.6.1高級特性使用是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、玉泉網(wǎng)站維護、網(wǎng)站推廣。
jarslink更新1.6.1后新增了很多高級特性,下面我們來看下這些高級特性如何使用。
新版本加入了注解的支持,用戶只需要在構(gòu)建ModuleConfig的時候調(diào)用ModuleConfig.addScanPackage(String)方法即可,可以多次調(diào)用該方法來添加多個掃描包配置,該配置會被spring用來作為掃描包配置。
開啟注解后如果想要同時使用xml定義bean,與在普通spring項目中一樣,只需要有一個配置類(該類需要在spring的掃描路徑中),即注解為@Configuration的類,然后在該類上注解@ImportResource("你的spring bean定義xml文件位置")即可,需要注意的是,由于此種方式限于spring的實現(xiàn),xml中定義的bean不能依賴于注解定義的bean,而注解定義的bean則可以依賴于xml中定義的bean。
如過通過注解的方式定義了一個name值與xml中name值相同的bean,那么注解定義的bean將會被xml中定義的bean所取代。
如果注解中依賴的bean在運行時不存在(也就是該bean是在maven中引入模塊的,但是設(shè)置的scope是test或者provide等會在編譯期排除掉的),那么此時可以在父容器中定義一個相同的bean,此時該模塊A依然可以使用該bean。描述如下:
模塊A依賴于其他jar包中的bean B;
打包時該jar包被剔除或者打包后被刪除;
父容器中提供一個與bean B相同定義的bean C;
模塊A在父容器中運行依然可以透明的使用bean B(其實此時是bean C提供的功能)
那如果父容器和模塊中同時定義了相同的bean呢?此時模塊中仍然會使用本模塊的bean而不會使用父容器中的bean。
如果不是必要的情況下請不要使用該功能
如果模塊項目中存在這樣的情況:要引入的依賴jar包中存在spring bean的xml文件,位置和模塊項目中的一致,并且該xml文件是不需要的,那么此時使用xml的方式加載是無法排除該文件的,xml文件中的bean仍然會被加載,而使用注解的方式加載則不會存在該問題(注解其實也有,如果掃描的包名一致的話也會出現(xiàn)類似問題,但是正常來說包名是不會與第三方j(luò)ar包一致的)。
1.6.1版本支持同時注冊多個版本,該功能默認關(guān)閉,如果需要開啟那么可以使用ModuleConfig.setNeedUnloadOldVersion(false)來開啟多版本功能。開啟后ModuleManager的register(Module)方法將可以注冊同一模塊的多個版本,不開啟則后注冊的會替換新注冊的模塊。
1.6.1版本的ModuleManager默認實現(xiàn)存在并發(fā)問題,即使開啟多版本功能,如果某個模塊在第一次注冊時同時兩個線程或者多個線程注冊,那么此時有可能會丟失一些模塊,也就是有可能會有一個或多個模塊注冊失敗。該問題將在下個版本修復(fù)。
該問題只在該模塊第一次注冊時會出現(xiàn)該問題,如果之前已經(jīng)注冊過該模塊之后并發(fā)注冊則不會有該問題。
ModuleLoader moduleLoader = null;
ModuleManager moduleManager = null;
ModuleConfig config = new ModuleConfig();
//*************
//配置config的其他選項
//*************
config.addScanPackage("com.alipay");
//使用此配置加載Module將會遞歸掃描jar包中所有com.alipay目錄下的class
Module module = moduleLoader.load(config);
ModuleConfig config = new ModuleConfig();
//*************
//配置config的其他選項
//*************
config.withName("demo").withVersion("1.0").withNeedUnloadOldVersion(false);
Module module = moduleLoader.load(config);
moduleManager.register(module);
config.withName("demo").withVersion("2.0").withNeedUnloadOldVersion(false);
module = moduleLoader.load(config);
moduleManager.register(module);
//此處該module的版本號為2.0,后注冊的module會被設(shè)置為默認module
module = moduleManager.find("demo");
//通過指定版本號可以獲取到之前注冊的(因為2.0版本配置了允許存在多個版本的module,所以此時1.0版本的仍然能被找到)
module = moduleManager.find("demo" , "1.0");
如果查看源碼可以得知,needUnloadOldVersion選項只在本次注冊中有效,也就是如果當(dāng)前注冊的模塊配置允許存在多版本,那么即使之前的模塊是不允許存在多版本也會忽略,僅僅使用本次注冊的模塊的配置,反之,如果之前模塊允許多版本存在,但是當(dāng)前注冊的模塊不允許,那么就會將之前的卸載了。當(dāng)前注冊的模塊不允許多版本存在時系統(tǒng)會如何卸載模塊呢?如果當(dāng)前注冊的模塊不允許存在多版本時只會將之前的默認版本模塊刪除,并不會刪除其他模塊。詳情請看下列示例。
ModuleConfig config = new ModuleConfig();
//*************
//配置config的其他選項
//*************
config.withName("demo").withVersion("1.0").withNeedUnloadOldVersion(true);
Module module = moduleLoader.load(config);
moduleManager.register(module);
config.withName("demo").withVersion("2.0").withNeedUnloadOldVersion(false);
module = moduleLoader.load(config);
moduleManager.register(module);
上面這個例子最后系統(tǒng)將存在1.0版本和2.0版本的模塊
ModuleConfig config = new ModuleConfig();
//*************
//配置config的其他選項
//*************
config.withName("demo").withVersion("1.0").withNeedUnloadOldVersion(true);
Module module = moduleLoader.load(config);
moduleManager.register(module);
config.withName("demo").withVersion("2.0").withNeedUnloadOldVersion(false);
module = moduleLoader.load(config);
moduleManager.register(module);
上面這個例子最后系統(tǒng)將只存在2.0版本,1.0版本在2.0版本注冊時將會被卸載。
ModuleConfig config = new ModuleConfig();
//*************
//配置config的其他選項
//*************
config.withName("demo").withVersion("1.0").withNeedUnloadOldVersion(true);
Module module = moduleLoader.load(config);
moduleManager.register(module);
moduleManager.activeVersion("demo", "1.1");
config.withName("demo").withVersion("2.0").withNeedUnloadOldVersion(false);
module = moduleLoader.load(config);
moduleManager.register(module);
上面這個例子最后仍然會同時存在1.0和2.0兩個版本,因為1.0版本注冊后系統(tǒng)將默認demo模塊的默認版本切換到了一個不存在的1.1版本,當(dāng)2.0版本的demo模塊注冊時,雖然2.0版本配置的不允許存在多個版本存在,會將此時的默認版本卸載,但是此時demo模塊的默認版本是一個不存在的1.1,所以并不會有實際的版本會被卸載,1.0也因此保留了下來。
上述就是小編為大家分享的jarslink1.6.1高級特性使用是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞標題:jarslink1.6.1高級特性使用是怎樣的
當(dāng)前地址:http://www.chinadenli.net/article28/iiosjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、關(guān)鍵詞優(yōu)化、商城網(wǎng)站、小程序開發(fā)、定制開發(fā)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)