加载属性的最佳策略是什么?

Joã*_*lva 12 java properties

我有几个类需要加载一些属性文件,我想知道实现这一目标的最佳实践是什么.我想到了两种基本方法:

  • 对每个类中的属性文件名进行硬编码,然后使用Properties该类从a加载FileInputStream,如果有人决定更改属性文件的名称,则可能会出现问题,因为它在代码中是硬编码的.

    public class A {
        public A() {
            Properties p = new Properties().load(
                    new FileInputStream("properties/Aconfig.properties"));
            String value = p.getProperty("key", "");
        }        
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 创建一个方法,给定一个类名,加载一个与该类同名的属性文件.虽然这种方法不需要对属性文件名进行硬编码,但它确实要求我们在命名文件时遵循一些约定,这可能会引起混淆.

    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.
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

但是,可能还有许多其他更优雅的方法,这就是我提出这些问题的原因:i)在Java中加载属性文件的最佳实践是什么?ii)你是否使用任何照顾工作的帮助班?iii)在哪里(在代码中)你通常加载属性文件?

另外,类可以"自动加载"其属性吗?或者我应该将我需要的参数传递给构造函数?传递参数的问题在于,某些类(~20,表示统计模型中的参数)的方法太多了.

Chs*_*y76 7

最好的做法是使用某种依赖注入容器-例如Spring框架谷歌吉斯.

它解决了各种问题 - 你没有将你的类绑定到特定的属性文件名,你不必担心在该类中加载所述属性并处理可能的异常,并且你不必传递30个属性文件name作为命令行参数(或系统属性).

除了属性加载之外,它还可以帮助许多其他东西:-) - 尝试它,你会想知道你是如何生活的.

更新:顺便提一下,你的另一个问题也是Spring会关注的问题之一.

更新#2:我刚刚意识到我已经尝试过将Spring推向你:-)冒着重复自己的风险,Spring会真正帮助抽象.根据您在属性文件中存储的内容,您可能根本不需要它们(如果它们处理配置),或者您将获得一个非常好的API来处理它们(如果它们是资源包或类似的东西).