一聚教程网:一个值得你收藏的教程网站

热门教程

PASX简化Java开发

时间:2022-07-02 17:27:03 编辑:袖梨 来源:一聚教程网

你是否曾经编写了一个程序,却在复检的时候发现它的配置过程很不合理?你是否曾经使用过配置文件,却发现它们不能满足描述应用程序的需要?你是否为了解决几个特殊问题而创建过临时配置补丁,却把花费更多时间、开发普遍适用方案的希望寄托到了未来?
如果你的回答是肯定的,那么,你和大多数其他Java程序员一样幸运,有一些工具能够帮助你解决这些问题。如果你的回答是否定的,关于属性文件局限的讨论也许能够让你信服――还有更好的方法可供使用。
属性文件是Java编程和运行环境的一个重要组成部分。然而,当一个程序员需要的功能远远超过Properties类提供的简单名字-值对时,他需要有更丰富的表现手法。通常,Java程序员扩展属性文件的方法是为属性本身的名字或值(或两者同时)增加额外的语义信息。很多时候,这种看来有效的方法会使问题越来越复杂。
为说明问题,请利用属性把一系列的值赋给单个名字。让我们假定你想要管理一组名称服务器,可能采用的属性文件内容如下:
hosts_1=ns.foo.com
hosts_2=ns.bar.com
hosts_3=ns.acme.com
代码很简单。改变名字-值对中名字的含义之后,你可以轻松地编写出把“hosts_”开头的名字当成“hosts”列表中一个元素的程序。
下面,我们来看看一个更复杂的例子。假设你有同一Bean类InternetHost的两个不同实例:实例A关联到一个Web服务器的列表;实例B关联到一个名称服务器的列表。要从同一个文件配置这两个实例,一种可能的方案如下:
name_hosts_1=ns.foo.com
name_hosts_2=ns.bar.com
name_hosts_3=ns.acme.com
web_hosts_1=www.foo.com
web_hosts_2=www.bar.com
web_hosts_3=www.acme.com
这种方法行得通,但总是给人以拼拼凑凑的感觉。如果你还不相信的话,稍微增加一点问题的复杂性:让这些列表中的某个元素自己也成为一个列表;或者,使得下划线字符(“_”)在名字-值对中合法。在这些情况下,简单的属性文件变得非常复杂。
作为一个细心的读者,你可能已经发现,InternetHost各个实例的命名方式逐渐模糊。为了把前三个属性赋值给实例A,把后三个属性赋值给实例B,你必须用某种与具体实例无关的方法告诉实例它们该用哪一组属性值。如果用直接编码的方式,让实例A寻找以“name_”开头的属性,让实例B寻找以“Web_”开头的属性,那么,这两个实例将不再属于同一对象类。
最后的例子还显示出另外一个问题。这就是,如何来调用实例A?简单地叫它“A”?到哪里去寻找它?它是本地实例还是远程接口?是否存在指向它的全局静态引用?如是,如何访问实例B(或者,那是否是“B”)?

热门栏目