W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
配置文件命名空間,主要應(yīng)用場(chǎng)景是模塊化下的 static-config.xml
配置文件。我們先看一個(gè)實(shí)際的例子,下面這些 xml 片段來自于 Hasor 的實(shí)際項(xiàng)目中。
來自 Hasor 核心項(xiàng)目包。
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:root="http://project.hasor.net/hasor/schema/main" xmlns="http://project.hasor.net/hasor/schema/hasor-core">
<!-- http://project.hasor.net/hasor/schema/main命名空間默認(rèn)配置 -->
<root:config>
<root:hasor.loadPackages>${HASOR_LOAD_PACKAGES}</root:hasor.loadPackages>
</root:config>
<hasor>
<loadPackages>net.hasor.*</loadPackages>
....
</hasor>
</config>
來自 RSF RPC項(xiàng)目。
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/hasor-rsf">
<hasor>
<loadPackages>net.hasor.rsf.*</loadPackages>
...
</hasor>
</config>
來自 RSF 注冊(cè)中心項(xiàng)目。
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/hasor-registry">
<hasor>
<loadPackages>net.hasor.rsf.registry.*</loadPackages>
...
</hasor>
</config>
從上面配置文件中可以看出,每個(gè)項(xiàng)目都有自己的 loadPackages
每個(gè)配置文件之間最重要的不同點(diǎn)是它們都使用了一個(gè)全新的 xmlns
空間。對(duì)于第一個(gè) xml 文件顯得可能比較復(fù)雜,它是在一個(gè) xml 中配置了兩個(gè)命名空間的數(shù)據(jù)。
Hasor 的配置文件就是通過這種方式來隔離不同的模塊,下面我們通過一個(gè)例子來展示一下配置文件模塊化的終極作用。
首先我們有兩個(gè) static-config.xml
配置文件,它們分別位于jarA、jarB。兩個(gè) jar 包中。不巧的是兩個(gè)項(xiàng)目彼此不知道對(duì)方的存在,它們都定義了相同的配置:
------static-config.xml(jarA)
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://mode1.myProject.net">
<appSettings>
<serverLocal url="www.126.com" />
</appSettings>
</config>
------static-config.xml(jarB)
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://mode2.myProject.net">
<appSettings>
<serverLocal url="www.souhu.com" />
</appSettings>
</config>
這時(shí)如果根據(jù)我們同時(shí)加載兩個(gè)配置文件,那么因?yàn)榕渲霉?jié)節(jié)點(diǎn)沖突,我們?cè)谧x取配置時(shí)候肯定會(huì)導(dǎo)致一個(gè)配置文件的內(nèi)容丟失。但是如果是這樣就不會(huì)有問題:
Settings mod1 = settings.getSettings("http://mode1.myProject.net");
Settings mod2 = settings.getSettings("http://mode2.myProject.net");
System.out.println(mod1.getString("appSettings.serverLocal.url"));
System.out.println(mod2.getString("appSettings.serverLocal.url"));
下面這個(gè)配置文件,等同于上面兩個(gè)配置文件。懂得 xml 的同學(xué)肯定一眼就看出來了,其實(shí)下面這個(gè)配置文件只不過是把上面兩個(gè)配置文件的內(nèi)容合并到了一起。
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:mod1="http://mode1.myProject.net" xmlns:mod2="http://mode2.myProject.net" xmlns="http://project.hasor.net/hasor/schema/main">
<!-- mode1 配置 -->
<mod1:config>
<mod1:appSettings>
<mod1:serverLocal mod1:url="www.126.com" />
</mod1:appSettings>
</mod1:config>
<!-- mode2 配置 -->
<mod2:config>
<mod2:appSettings>
<mod2:serverLocal mod2:url="www.souhu.com" />
</mod2:appSettings>
</mod2:config>
</config>
使用 Hasor 解析配置文件,使用上面一個(gè)配置文件或者上面兩個(gè)配置文件效果是一樣的。這個(gè)就是 Hasor 對(duì)配置文件命名空間的支持。下一個(gè)章節(jié)我們專門講解配置文件的加載順序,以及利用加載順序解決配置項(xiàng)目沖突。
多個(gè)命名空間配置相同的節(jié)點(diǎn),在讀取配置時(shí) http://project.hasor.net/hasor/schema/main
命名空間下的配置享有優(yōu)先權(quán)。其它命名空間的配置按照字符串排序順序決定。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: