Hasor 讀取配置文件

2018-10-08 09:16 更新

前面章節(jié),我們已經(jīng)介紹了 Hasor 的配置文件結(jié)構(gòu)。下面我們介紹一個(gè) Hasor 的配置文件的基本規(guī)則。

隨意性


Hasor 配置文件在編寫時(shí)完全遵循 Xml 標(biāo)準(zhǔn)。但是因?yàn)闆]有 xml 內(nèi)容上的固定限制,因此 Hasor 配置文件本質(zhì)上是沒有一個(gè)適合的 Sechma 可以去加以驗(yàn)證的。

這是 Hasor 配置文件靈活性的一個(gè)表現(xiàn),也是區(qū)別于 Spring 等其它基于 Xml 做配置文件的框架的特點(diǎn)。

讀取規(guī)則


如果您不遵循這個(gè)規(guī)則那么您在讀取配置文件時(shí)就會(huì)陷入麻煩,因此建議您在使用 Hasor 配置文件之前一定要閱讀本段。

Hasor 在讀取配置文件時(shí)您并不是通過(guò) Xml Dom 或者 XPath 表達(dá)式進(jìn)行篩選,Hasor 為您提供了一套更為簡(jiǎn)單方便而且對(duì)屬性文件也十分親和的讀取方式。我們以下面這個(gè)配置文件為例:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/main">
    <!-- Demo 項(xiàng)目源碼所處包 -->
    <hasor debug="false">
        <loadPackages>net.test.project.*</loadPackages>
    </hasor>
    <hasor-jdbc>
        <!-- 名稱為 localDB 的內(nèi)存數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)引擎使用 HSQL -->
        <dataSource name="localDB" dsFactory="net.test.C3p0Factory">
            <driver>org.hsqldb.jdbcDriver</driver>
            <url>jdbc:hsqldb:mem:aname</url>
        </dataSource>
    </hasor-jdbc>
</config>


  • 如果想讀?。?code>debug="false" 對(duì)應(yīng)的表達(dá)式為:hasor.debug
  • 如果想讀?。?code>net.test.project.* 對(duì)應(yīng)的表達(dá)式為:hasor.loadPackages
  • 如果想讀?。?code>org.hsqldb.jdbcDriver 對(duì)應(yīng)的表達(dá)式為:hasor-jdbc.dataSource.driver

??這種讀取規(guī)則我們可能感覺有點(diǎn)熟悉。它有點(diǎn)像Xpath,但又不同。下面我們就來(lái)正式介紹這種規(guī)則。

  • 1.除根節(jié)點(diǎn)之外,任何元素、屬性都被成為節(jié)點(diǎn)。
  • 2.要想讀取到某個(gè)節(jié)點(diǎn),必須通過(guò)節(jié)點(diǎn)表達(dá)式。
  • 3.一個(gè)節(jié)點(diǎn)的表達(dá)式是,其最根的節(jié)點(diǎn)到它之間所有節(jié)點(diǎn)的路徑。路徑使用.分割。

??我們?cè)诨仡^去看上面三個(gè)讀取的例子:

  • debug="false" 要讀取到 false,它所處的節(jié)點(diǎn)是一個(gè)屬性節(jié)點(diǎn) debug 這個(gè)屬性節(jié)點(diǎn)位于 hasor 節(jié)點(diǎn)之下,hasor 節(jié)點(diǎn)在往上就是跟節(jié)點(diǎn)了,規(guī)則上說(shuō)過(guò) 根節(jié)點(diǎn)除外。因此最根節(jié)點(diǎn)就是 hasor。因此它的路徑是:hasor -> debug,接著路徑轉(zhuǎn)化為表達(dá)式:hasor.debug。
  • net.test.project.* 要讀取到這個(gè)值,它所處的節(jié)點(diǎn)是一個(gè)元素節(jié)點(diǎn) loadPackages 這個(gè)元素節(jié)點(diǎn)位于 hasor 節(jié)點(diǎn)之下。因此它的路徑是:hasor -> loadPackages,接著路徑轉(zhuǎn)化為表達(dá)式:hasor.loadPackages。
  • org.hsqldb.jdbcDriver 要讀取到這個(gè)值,它所處的節(jié)點(diǎn)是一個(gè)元素節(jié)點(diǎn) driver 這個(gè)屬性節(jié)點(diǎn)位于 dataSource 節(jié)點(diǎn)之下,在往上是hasor-jdbc元素節(jié)點(diǎn)。因此它的路徑是:hasor-jdbc -> dataSource -> driver,接著路徑轉(zhuǎn)化為表達(dá)式:hasor-jdbc.dataSource.driver。


最后在得到表達(dá)式之后,我們通過(guò) Settings 接口就可以讀取配置信息了:

AppContext appContext = Hasor.createAppContext("simple-config.xml");
Settings settings = appContext.getInstance(Settings.class);
String driver = settings.getString("hasor-jdbc.dataSource.driver");


以上就是 Hasor 配置文件的讀取規(guī)則。下面我們?cè)谟懻撘幌绿厥馇闆r,這種情況我們要盡量回避,以避免給自己帶來(lái)麻煩。舉例Xml,我們還是讀取debug配置信息:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/main">
    <hasor debug="false">
        <debug>true</debug>
    </hasor>
</config>


上面的配置文件中我們發(fā)現(xiàn) hasor 節(jié)點(diǎn)下面有兩個(gè)節(jié)點(diǎn),一個(gè)是元素節(jié)點(diǎn)叫 debug,一個(gè)是屬性節(jié)點(diǎn)也叫 debug。根據(jù)我們上面的路徑規(guī)則,這兩個(gè)節(jié)點(diǎn)的最終表達(dá)式均為:hasor.debug,這種情況我們稱之為配置沖突。

配置沖突要盡量避免。如果不小心遇到了沖突,Hasor 在加載配置文件時(shí)進(jìn)行數(shù)據(jù)合并。相信無(wú)論合并之后選用哪個(gè)值,對(duì)您來(lái)說(shuō)都是不想看到的。不過(guò)有時(shí)候沖突也會(huì)被我們所利用。

還是這個(gè)例子如果配置文件的內(nèi)容無(wú)法改變,但是我還想讀取 debug 辦法還是有的。既然直接讀取 debug 節(jié)點(diǎn)讀取不到,那我們可以讀它的父節(jié)點(diǎn)。通過(guò)父親節(jié)點(diǎn)以Xml的形式去解決它。具體解決辦法如下:

Settings settings = ...;
XmlNode node = settings.getXmlNode("hasor");
String attrDebug = node.getAttribute("debug");
String attrDebug = node.getOneChildren("debug").getText();


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)