我继承了一个应用程序,它使用 java 属性文件来定义配置参数,例如数据库名称。
有一个名为 MyAppProps 的类,如下所示:
public class MyAppProps {
protected static final String PROP_FILENAME = "myapp.properties";
protected static Properties myAppProps = null;
public static final String DATABASE_NAME = "database_name";
public static final String DATABASE_USER = "database_user";
// etc...
protected static void init() throws MyAppException {
try {
Classloader loader = MyAppException.class.getClassLoader();
InputStream is = loader.getResourceAsStream(PROP_FILENAME);
myAppProps = new Properties();
myAppProps.load(is);
} catch (Exception e) {
threw new MyAppException(e.getMessage());
}
}
protected static String getProperty(String name) throws MyAppException {
if (props==null) {
throw new MyAppException("Properties was not initialized properly.");
}
return props.getProperty(name);
}
}
其他需要获取属性值的类包含以下代码:
String dbname = MyAppProps.getProperty(MyAppProps.DATABASE_NAME);
当然,在第一次调用 MyAppProps.getProperty 之前,MyAppProps 需要像这样初始化:
MyAppProps.init();
我不喜欢init()
需要调用的事实。初始化不应该发生在静态初始化块或私有构造函数中吗?
除此之外,代码似乎还有其他问题,我不能完全确定它。属性实例通常包装在自定义类中吗?这里还有什么不对的吗?