我有一个场景,我正在尝试在我的应用程序中实现错误代码机制。这是我目前所遵循的方法。
Properties prop = new Properties();
InputStream input = null;
try {
String filename = "ErrorCode.properties";
input = getClass().getClassLoader().getResourceAsStream(filename);
if (input == null) {
log.debug("Sorry, unable to find " + filename);
return null;
}
prop.load(input);
Enumeration<?> e = prop.propertyNames();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
String value = prop.getProperty(key);
log.debug("Key : " + key + ", Value : " + value);
}
但是我需要在很多不同的类中使用错误代码,而且我不想在不同的类中一直编写上面的代码。
是否有其他方法初始化属性文件一次并在类中的任何位置使用它。
我如何实现这一目标?
有哪些不同的实现方法?
我正在使用春天,有什么方法可以在春天实现这个目标吗?
我对任何其他机制而不是属性文件都是开放的。
答案 0 :(得分:0)
为什么不直接实现单独的单例类,如“ErrorCodes”,在对象创建期间初始化属性文件一次,然后通过getter检索文件?
答案 1 :(得分:0)
定义Constants.java并添加要在整个应用程序运行时使用的属性。这些属性可以被其他类使用,不需要为每个类定义进行初始化。
public class Constants {
public static String[] tableAndColumnNames;
public static String[] getTableAndColumnNames() {
return tableAndColumnNames;
}
public static void setTableAndColumnNames(String tableNames) {
Constants.tableAndColumnNames = tableNames.split(";");
}
public static String getDB() {
return DB;
}
public static final String HSQLBD = "HSQLDB";
public static final String ORACLE = "ORACLE";
public static String DB;
public static void setDB(int dB) {
if (dB == 0) {
Constants.DB = HSQLBD;
} else {
Constants.DB = ORACLE;
}
}
}
在应用程序启动时加载这些属性。当您加载属性时,只需执行下面的设置常量
public static void loadProperties() {
Properties property = new Properties();
InputStream input = CommonUtilities.class.getResourceAsStream("/DB.properties");
property.load(input);
Constants.setDB(Integer.parseInt(prop.getProperty("DB")));
Constants.setTableAndColumnNames(property.getProperty("tableAndColumnNames"));
}
在初始化属性之后,只需引用Constant类就可以在程序的任何一点使用它。像
public void someOtherClass()
public static void main(String[] args) {
if(this.DB.equals(Constans.getDB()) // will return the DB from the properties class
// no need to initialize properties again in every class.
}
希望这有帮助。