我有几个类需要加载一些属性文件,我想知道实现这一点的最佳做法是什么。我想到了两种基本方法:
在每个类中硬编码属性文件的名称,然后使用
Properties
类从FileInputStream
中加载,如果有人决定更改属性文件的名称,那么它将被硬编码在代码中,可能会引起问题。
public class A {
public A() {
Properties p = new Properties().load(
new FileInputStream("properties/Aconfig.properties"));
String value = p.getProperty("key", "");
}
}
创建一个方法,给定一个类名,它可以加载与该类同名的属性文件。虽然这种方法不需要硬编码属性文件名,但需要按照某些约定命名文件,可能会导致混淆。 public class A {
public A() {
Properties p = PropertiesHelper.loadFromClassName(A.class.getName());
// here, we **assume** that there is a A.properties file in the classpath.
}
}
然而,可能存在许多其他更优雅的方法,这就是我提出这些问题的原因:i)在Java中加载属性文件的最佳实践是什么?ii)您是否使用任何帮助类来处理此工作?iii)通常在代码的哪个位置加载属性文件?此外,一个类是否可以“自动加载”其属性?还是应该将我需要的参数传递给构造函数?传递参数的问题在于某些类有太多参数(~20个,表示统计模型中的参数)。
<property>
元素是您放置属性文件名称的位置;然后在类内部,您将有一个相应的setter,以Resource作为参数。就模型参数而言,它们可能是适合通过<property>
设置的好候选项,也可能不是好的候选项-这取决于它们是否具有合理的“默认值”或者是用户必须指定的内容。您可以查看PropertyPlaceholderConfigurer或PropertyOverrideConfigurer:http://static.springsource.org/spring/docs/2.5.x/reference/beans.html,它们作为属性文件和通过上下文设置的`<property>`之间的桥梁。 - ChssPly76