jarslink1.6.1高級(jí)特性使用是怎樣的

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

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、玉泉網(wǎng)站維護(hù)、網(wǎng)站推廣。

jarslink高級(jí)特性使用

jarslink更新1.6.1后新增了很多高級(jí)特性,下面我們來看下這些高級(jí)特性如何使用。

注解的使用

新版本加入了注解的支持,用戶只需要在構(gòu)建ModuleConfig的時(shí)候調(diào)用ModuleConfig.addScanPackage(String)方法即可,可以多次調(diào)用該方法來添加多個(gè)掃描包配置,該配置會(huì)被spring用來作為掃描包配置。

     

注解開啟后的一些注意事項(xiàng)

  • 開啟注解后如果想要同時(shí)使用xml定義bean,與在普通spring項(xiàng)目中一樣,只需要有一個(gè)配置類(該類需要在spring的掃描路徑中),即注解為@Configuration的類,然后在該類上注解@ImportResource("你的spring bean定義xml文件位置")即可,需要注意的是,由于此種方式限于spring的實(shí)現(xiàn),xml中定義的bean不能依賴于注解定義的bean,而注解定義的bean則可以依賴于xml中定義的bean。

  • 如過通過注解的方式定義了一個(gè)name值與xml中name值相同的bean,那么注解定義的bean將會(huì)被xml中定義的bean所取代。

     

可以實(shí)現(xiàn)但是不推薦使用的

如果注解中依賴的bean在運(yùn)行時(shí)不存在(也就是該bean是在maven中引入模塊的,但是設(shè)置的scope是test或者provide等會(huì)在編譯期排除掉的),那么此時(shí)可以在父容器中定義一個(gè)相同的bean,此時(shí)該模塊A依然可以使用該bean。描述如下:

  1. 模塊A依賴于其他jar包中的bean B;

  2. 打包時(shí)該jar包被剔除或者打包后被刪除;

  3. 父容器中提供一個(gè)與bean B相同定義的bean C;

  4. 模塊A在父容器中運(yùn)行依然可以透明的使用bean B(其實(shí)此時(shí)是bean C提供的功能)

那如果父容器和模塊中同時(shí)定義了相同的bean呢?此時(shí)模塊中仍然會(huì)使用本模塊的bean而不會(huì)使用父容器中的bean。

如果不是必要的情況下請不要使用該功能

     

什么時(shí)候應(yīng)該優(yōu)先使用注解加載

如果模塊項(xiàng)目中存在這樣的情況:要引入的依賴jar包中存在spring bean的xml文件,位置和模塊項(xiàng)目中的一致,并且該xml文件是不需要的,那么此時(shí)使用xml的方式加載是無法排除該文件的,xml文件中的bean仍然會(huì)被加載,而使用注解的方式加載則不會(huì)存在該問題(注解其實(shí)也有,如果掃描的包名一致的話也會(huì)出現(xiàn)類似問題,但是正常來說包名是不會(huì)與第三方j(luò)ar包一致的)。

     

多版本注冊功能

     

如何使用多版本功能

1.6.1版本支持同時(shí)注冊多個(gè)版本,該功能默認(rèn)關(guān)閉,如果需要開啟那么可以使用ModuleConfig.setNeedUnloadOldVersion(false)來開啟多版本功能。開啟后ModuleManager的register(Module)方法將可以注冊同一模塊的多個(gè)版本,不開啟則后注冊的會(huì)替換新注冊的模塊。

     

已知問題

1.6.1版本的ModuleManager默認(rèn)實(shí)現(xiàn)存在并發(fā)問題,即使開啟多版本功能,如果某個(gè)模塊在第一次注冊時(shí)同時(shí)兩個(gè)線程或者多個(gè)線程注冊,那么此時(shí)有可能會(huì)丟失一些模塊,也就是有可能會(huì)有一個(gè)或多個(gè)模塊注冊失敗。該問題將在下個(gè)版本修復(fù)。

該問題只在該模塊第一次注冊時(shí)會(huì)出現(xiàn)該問題,如果之前已經(jīng)注冊過該模塊之后并發(fā)注冊則不會(huì)有該問題。

     

示例代碼

     

開啟注解

    ModuleLoader moduleLoader = null;
    ModuleManager moduleManager = null;
    ModuleConfig config = new ModuleConfig();
    //*************
    //配置config的其他選項(xiàng)
    //*************
    config.addScanPackage("com.alipay");
    //使用此配置加載Module將會(huì)遞歸掃描jar包中所有com.alipay目錄下的class
    Module module = moduleLoader.load(config);
             

使用多版本注冊功能

    ModuleConfig config = new ModuleConfig();
    //*************
    //配置config的其他選項(xiàng)
    //*************
    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的版本號(hào)為2.0,后注冊的module會(huì)被設(shè)置為默認(rèn)module
    module = moduleManager.find("demo");
    //通過指定版本號(hào)可以獲取到之前注冊的(因?yàn)?.0版本配置了允許存在多個(gè)版本的module,所以此時(shí)1.0版本的仍然能被找到)
    module = moduleManager.find("demo" , "1.0");
             

多版本注冊功能細(xì)節(jié)說明(實(shí)現(xiàn)機(jī)制)

如果查看源碼可以得知,needUnloadOldVersion選項(xiàng)只在本次注冊中有效,也就是如果當(dāng)前注冊的模塊配置允許存在多版本,那么即使之前的模塊是不允許存在多版本也會(huì)忽略,僅僅使用本次注冊的模塊的配置,反之,如果之前模塊允許多版本存在,但是當(dāng)前注冊的模塊不允許,那么就會(huì)將之前的卸載了。當(dāng)前注冊的模塊不允許多版本存在時(shí)系統(tǒng)會(huì)如何卸載模塊呢?如果當(dāng)前注冊的模塊不允許存在多版本時(shí)只會(huì)將之前的默認(rèn)版本模塊刪除,并不會(huì)刪除其他模塊。詳情請看下列示例。

    ModuleConfig config = new ModuleConfig();
    //*************
    //配置config的其他選項(xiàng)
    //*************
    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);
     

上面這個(gè)例子最后系統(tǒng)將存在1.0版本和2.0版本的模塊

    ModuleConfig config = new ModuleConfig();
    //*************
    //配置config的其他選項(xiàng)
    //*************
    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);
     

上面這個(gè)例子最后系統(tǒng)將只存在2.0版本,1.0版本在2.0版本注冊時(shí)將會(huì)被卸載。

    ModuleConfig config = new ModuleConfig();
    //*************
    //配置config的其他選項(xiàng)
    //*************
    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);
     

上面這個(gè)例子最后仍然會(huì)同時(shí)存在1.0和2.0兩個(gè)版本,因?yàn)?.0版本注冊后系統(tǒng)將默認(rèn)demo模塊的默認(rèn)版本切換到了一個(gè)不存在的1.1版本,當(dāng)2.0版本的demo模塊注冊時(shí),雖然2.0版本配置的不允許存在多個(gè)版本存在,會(huì)將此時(shí)的默認(rèn)版本卸載,但是此時(shí)demo模塊的默認(rèn)版本是一個(gè)不存在的1.1,所以并不會(huì)有實(shí)際的版本會(huì)被卸載,1.0也因此保留了下來。

上述就是小編為大家分享的jarslink1.6.1高級(jí)特性使用是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞標(biāo)題:jarslink1.6.1高級(jí)特性使用是怎樣的
當(dāng)前地址:http://muchs.cn/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)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)