在 Java Web 应用程序中,我有几个类,它们具有需要存储在属性文件中的一些凭据的静态方法。
我想知道检索属性文件中的值的首选方法是什么:
- 静态 block - 在类中有一个
static
block ,它从属性文件中读取并将适当的凭据设置为类变量。 - 上下文参数 - 从
ContextListener
中的属性文件读取并在上下文参数中设置值。
(1) 的优点是我不必每次调用静态方法时都将凭据传递到静态方法中,这是多余的。
(1) 的缺点是我要多次读取同一个属性文件。
(情况(2)的优点/缺点相反)
最佳答案
尽管通常避免使用单例模式,但您可以在此处使用它来从任何地方访问您的属性。而且它只有不可变的状态,所以我认为在这里使用单例是可以的:
public final class MyProperties {
private final Properties properties;
private MyProperties(){
properties = new Properties();
properties.load(...); // Load your properties here and maybe do some checks
}
public static final MyProperties INSTANCE = new MyProperties();
// Or add some fields/getters instead
public String getProp(String key){
return properties.getProperty(key);
}
}
请注意,这里的实例是在启动时创建的,但您也可以在第一次需要时延迟创建它。这样做的优点是,如果找不到属性文件,您将在启动时收到通知。
您还可以扩展它来检查是否包含某些强制属性,否则抛出错误,并为属性提供一些 getter。
或者,您也可以只拥有在静态初始值设定项中初始化的公共(public)静态字段,如下所示:
public final class MyProperties {
public static final String USERNAME;
// More fields
static {
// Load your properties here and set the fields accordingly
}
private MyProperties() {}
}
关于java - 在静态 block 与上下文参数中设置属性文件值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40399534/