熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

提高Java應用程序屬性持久化的方法

2022-06-13   來源: JSP教程 

  絕大多數應用程序都需要一套持久保存的屬性(property)來維護正常的運行我們常常用javautil包中的Properties類來實現這樣的存儲它提供保存屬性的一套方便使用的機制但是有時候你需要更復雜的屬性文件結構你可以通過擴展Properties類來達到這個目的
  
  Properities類按照關鍵字——值對的形式來保存數據它不允許復制但實際上對復制功能的需求又是很常見的不過通過把同樣的條目分成好幾個文件並給不同關鍵字拷貝同樣的值的方法還是有可能用標准Properities類來達到拷貝的目的的不幸的是這個解決方法易於出錯而且更改起來也很單調乏味一個簡單的解決方法就是使用ProperitiesExpansion類它允許用${}標記來擴展屬性來消除數據重復它還允許你在同一個屬性文件中使用同樣的條目(通過把它們保存在不同的位置)
  
  
  擴展屬性
  
  
  
  屬性擴展的首要目的就是使得屬性文件中的數據表示更清晰更容易維護為了達到這個目的你可以用${}標記來引入可被替換的參數這樣在運行時的屬性查詢時它們可以擴展為用標記名所表示的值下面是含有替換標記的屬性文件的一個例子
  
  username=john
  homedir=usr
  workingdir=${homedir}/tmp
  
  
  當訪問這些屬性時${homedir}標記就用usr值所代替這樣workingdir屬性就是usr/tmp請查看代碼清單A所給出PropertiesExpansion類為了提供標記擴展我重載了標准Properties類的getProperty(String key)setProperty(String keyString value)以及load(InputStream is)我還添加了replace()方法
  
  在清單A中有兩個已重載的replace()方法一個用來從當前屬性清單中替換所有的替換標記另一個repalce(String inHashtable keys)是一個方便的靜態方法它用包含替換標記的哈希表對象來執行同樣的替換
  
  我們重寫了setProperty()load()和getProperty()方法這樣它就可以檢查映射給定關鍵字的值是否包含擴展標記如果發現擴展標記它們就用合適的值來替換這些標記
  
  局部屬性
  
  
  
  在某些情況下具有相同名字但映射為不同值的關鍵字是有用的你可以通過局部(sectioning)屬性文件來達到這個目的如下所示
  
  # global properties
  sectionroot=root
  x=
  y=
  [user]
  x=${x}
  y=
  [${sectionroot}]
  x=
  y=
  
  
  在user之上的所有關鍵字——值對是全局參數在程序不同的地方都可以引用這些全局參數來實現值替換例如在屬性擴展之後${sectionroot}區域就變成了root區域而屬性x在user區域的值為
  
  如果你需要從指定區域中查詢一個已命名屬性那麼你可以使用getProperty(String sectionString key)方法它把區域名作為一個附加參數每個區域名都映射到一個包含關鍵字——值對的Properties對象為了在user區域內得到x屬性的值請用下面的一行代碼執行清單B中的代碼
  
  PropertiesExpansiongetProperty(userx)
  
  清單B中的setProperty()方法用來為期望的區域設置關鍵字——值該方法調用哈希表的put()方法該方法由PropertiesExpansion類所重載Put()方法的訣竅在於判斷一個關鍵字——值對屬於哪個區域並相應更新該區域由於put()方法允許插入其關鍵字或者值不是字符串的條目所以我強烈希望你不要直接用put()方法來設置屬性
  
  你可以通過調用sections()方法來查詢所有的區域的名字該方法返回區域名字的枚舉類型屬於某個區域的所有關鍵字可以通過調用sectionKeys()方法來查找到為了利用區域的位置把屬性寫道文件之中store()方法被重載了
  
  還有諸如getInt()getLong()getFloat()getDouble()和getBoolean()等附加的方法它們用來簡化把屬性值的類型轉換為諸如整型長整型浮點型雙精度和布爾等的簡單數據類型這些方法的參數為包含給定關鍵字的值的附加Properties對象

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19643.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.