属性扩展的首要目的就是使得属性文件中的数据表示更清晰更容易维护。为了达到这个目的,你可以用“${}”标记来引入可被替换的参数,这样在运行时的属性查询时,它们可以扩展为用标记名所表示的值。下面是含有替换标记的属性文件的一个例子:
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()方法,这样它就可以检查映射给定关键字的值是否包含扩展标记;如果发现扩展标记,它们就用合适的值来替换这些标记。