Hasor 命名空間

2018-10-08 09:16 更新

配置文件命名空間,主要應(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)。其它命名空間的配置按照字符串排序順序決定。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)