Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序级别的属性_Java_Properties - Fatal编程技术网

Java 应用程序级别的属性

Java 应用程序级别的属性,java,properties,Java,Properties,我目前有一个属性文件,我在每个需要获取属性的类中加载这个文件 static PropertiesConfiguration config = null; config = new PropertiesConfiguration("Interface.properties"); 这很好用。但我知道这不是多次加载属性文件的有效方法 有谁能帮助我如何在应用程序级别创建属性文件并创建一个java文件(比如config.java)+调用返回属性的方法。解决这个问题的一个方法是利用。您可以拥有一个保存属性

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

static PropertiesConfiguration config = null;
config = new PropertiesConfiguration("Interface.properties");
这很好用。但我知道这不是多次加载属性文件的有效方法


有谁能帮助我如何在应用程序级别创建属性文件并创建一个java文件(比如config.java)+调用返回属性的方法。

解决这个问题的一个方法是利用。您可以拥有一个保存属性实例的单例bean,然后将该bean作为依赖项注入到需要访问这些属性的每个类中

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

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


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

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

public void loadStreamToSysProperties(InputStream in) throws IOException
{
    Properties p = System.getProperties();
    p.load(in);                
}
然后我可以将它们从
System.getProperty
中取出,无论我在代码中的哪个位置。
在本例中,InputStream是我根据文件名/路径创建的流。

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

定义一个属性文件(比如configure.properties)

创建java类配置:

这个java类在启动时加载属性文件,并调用
getInstance
方法来获取属性值。获取应用程序中其他任何位置的属性值
import Config

Config.getInstance().getConfig().getString("property.given.in.properties");
如果变量名没有多大意义,很抱歉


谢谢大家的输入。

您能给我一些示例代码来加载应用程序级的singleton类,或者一些链接或教程吗。我在谷歌上搜索了一下,得到了很好的结果。@user877333-我建议你研究一下春季国际奥委会是如何运作的。网上有很多关于它的教程。如果你想创建一个singleton类,只需谷歌“singleton java”,你应该找到大量的引用(包括stackoverflow链接)。这种方法的一个问题是,系统属性可能会被底层组件覆盖(因此在防御实践中失败)。这是可行的,虽然不是我会这样做。
Config.getInstance().getConfig().getString("property.given.in.properties");