当前位置:  开发笔记 > 编程语言 > 正文

在哪里初始化java Properties对象?

如何解决《在哪里初始化javaProperties对象?》经验,为你挑选了1个好方法。

我继承了一个应用程序,它使用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()需要调用的事实.初始化不应该发生在静态初始化块或私有构造函数中吗?

除此之外,代码似乎有些其他问题,我无法完全理解它.属性实例通常包含在自定义类中吗?这里有什么别的错吗?



1> krosenvold..:

如果我像这样制作自己的包装类; 我总是喜欢为值创建强类型的getter,而不是通过静态final变量公开所有内部工作.

private static final String DATABASE_NAME = "database_name"
private static final String DATABASE_USER = "database_user"
public String getDatabaseName(){
   return getProperty(MyAppProps.DATABASE_NAME);
}
public String getDatabaseUser(){
   return getProperty(MyAppProps.DATABASE_USER);
}

静态初始化器看起来像这样;

static {
   init();
}

话虽如此,我很乐意说我不是静态初始化器的忠实粉丝.

您可以考虑查看依赖注入(DI)框架,如spring或guice,这些将允许您将适当的值直接注入需要使用它们的位置,而不是通过附加类的间接方式.很多人发现使用这些框架可以减少对这种管道代码的关注 - 但只有在你完成了框架的学习曲线之后.(DI框架很快学会,但需要花费很长时间才能掌握,所以这可能比你真正想要的更重要)

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有