应用程序级别的属性

时间:2011-08-22 18:39:24

标签: java properties

我目前有一个属性文件,我在每个需要获取属性的类中加载此文件

static PropertiesConfiguration config = null;
config = new PropertiesConfiguration("Interface.properties");

这很好用。但我知道这不是多次加载属性文件的有效方法。

任何人都可以帮助我如何在应用程序级别创建属性文件并创建一个java文件(例如 config.java )+调用返回属性的方法。

3 个答案:

答案 0 :(得分:5)

解决此问题的一种方法是使用dependency injection。您可以拥有一个包含属性实例的单例bean,然后将此bean作为依赖项注入到需要访问这些属性的每个类中。

实现依赖注入以使用Spring框架的一种方法。例如,您可以使用Spring的PropertyPlaceHolderConfigurer来实现加载属性文件。然后这个bean成为应用程序其余部分的引用bean。可以找到关于此的教程here

另一个选择是在主条目类的构造函数或应用程序的main方法中加载属性文件,然后将对象传递给需要它的类。但是,这将使您的应用程序更加紧密耦合,并且将来维护将更加困难。

另一种选择是创建一个加载属性的单例类,并有一个根据需要返回值的方法。

答案 1 :(得分:3)

我使用这种方法在应用程序级别设置属性。

定义属性文件(例如 configure.properties )。

创建一个java类 Config

public class Config {
    private static Config instance;
    private PropertiesConfiguration configure;

    private Config() throws ConfigurationException {
        configure = new PropertiesConfiguration("configure.properties");
    }

    public static Config getInstance() {
        if (null == instance) {
            try {
                instance = new Config();
            } catch (ConfigurationException ex) {
                throw new RuntimeException(ex);
            }
        }
        return instance;
    }

    public PropertiesConfiguration getConfigure() {
        return configure;
    }

    public void setConfig(PropertiesConfiguration configure) {
        this.configure = configure;
    }
}

此java类在启动时加载属性文件,并调用getInstance方法以获取属性的值。要在应用程序import Config

中的任何其他位置获取属性的值
Config.getInstance().getConfig().getString("property.given.in.properties");

很抱歉,如果变量名称没有多大意义。

感谢大家的投入。

答案 2 :(得分:1)

我只是在系统属性中加载我的属性文件:

public void loadStreamToSysProperties(InputStream in) throws IOException
{
    Properties p = System.getProperties();
    p.load(in);                
}

然后我可以将它们从System.getProperty中取出,而我在代码中。 在此示例中, InputStream 是我根据文件名/路径创建的流。

相关问题