提高Java应用程序属性持久化的方法

ZDNet软件频道 时间:2003-06-11 作者:ZDNet China |  我要评论()
本文关键词:
绝大多数应用程序都需要一套持久保存的属性(property)来维护正常的运行。我们常常用java.util包中的Properties类来实现这样的存储。但是有时候,你需要更复杂的属性文件结构,你可以通过扩展Properties类来达到这个目的。
本文译自Builder.com,未经许可请勿转载绝大多数应用程序都需要一套持久保存的属性(property)来维护正常的运行。我们常常用java.util包中的Properties类来实现这样的存储。它提供保存属性的一套方便使用的机制。但是有时候,你需要更复杂的属性文件结构,你可以通过扩展Properties类来达到这个目的。

Properities类按照“关键字——值”对的形式来保存数据,它不允许复制,但实际上,对复制功能的需求又是很常见的。不过,通过把同样的条目分成好几个文件并给不同关键字拷贝同样的值的方法,还是有可能用标准Properities类来达到拷贝的目的的。不幸的是,这个解决方法易于出错、而且更改起来也很单调乏味。一个简单的解决方法就是使用ProperitiesExpansion类,它允许用“${}”标记来扩展属性来消除数据重复。它还允许你在同一个属性文件中使用同样的条目(通过把它们保存在不同的位置)。

扩展属性

属性扩展的首要目的就是使得属性文件中的数据表示更清晰更容易维护。为了达到这个目的,你可以用“${}”标记来引入可被替换的参数,这样在运行时的属性查询时,它们可以扩展为用标记名所表示的值。下面是含有替换标记的属性文件的一个例子:
 
user.name=john
home.dir=usr
working.dir=$/tmp

 

当访问这些属性时,“$”标记就用“usr”值所代替,这样working.dir属性就是usr/tmp。请查看代码清单A所给出PropertiesExpansion类。为了提供标记扩展,我重载了标准Properties类的getProperty(String key)、setProperty(String key,String value)以及load(InputStream is),我还添加了replace()方法。

在清单A中有两个已重载的replace()方法,一个用来从当前属性清单中替换所有的替换标记,另一个repalce(String in,Hashtable keys)是一个方便的静态方法,它用包含替换标记的哈希表对象来执行同样的替换。

我们重写了setProperty()、load()和getProperty()方法,这样它就可以检查映射给定关键字的值是否包含扩展标记;如果发现扩展标记,它们就用合适的值来替换这些标记。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134