Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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 EE webapp中初始化属性?_Java_Jakarta Ee_Jax Rs - Fatal编程技术网

何时在Java EE webapp中初始化属性?

何时在Java EE webapp中初始化属性?,java,jakarta-ee,jax-rs,Java,Jakarta Ee,Jax Rs,我们有一个基于JAX-RS的webapp&它需要从属性文件中读取一些配置。我已经编写了一个ConfigurationProvider帮助器类来加载这些属性。这个类将在多个类中使用。我的问题是ConfigurationProvider应该在何时何地初始化 public class ConfigurationProvider { private static Properties properties; private static ConfigurationProvider config;

我们有一个基于JAX-RS的webapp&它需要从属性文件中读取一些配置。我已经编写了一个ConfigurationProvider帮助器类来加载这些属性。这个类将在多个类中使用。我的问题是ConfigurationProvider应该在何时何地初始化

    public class ConfigurationProvider {
private static Properties properties;
private static ConfigurationProvider config;
private static final String XYZ_PROPERTIES = "xyz.properties";

static {
    config = new ConfigurationProvider();
}

private ConfigurationProvider() {
    try {
        InputStream in = this.getClass().getClassLoader().
                getResourceAsStream(XYZ_PROPERTIES);
        properties = new Properties();
        properties.load(in);
    } catch(IOException ie) {
        ie.printStackTrace();
    }
}

public static ConfigurationProvider getInstance() {
    return config;
}

public String get(String propname) {
    return properties.getProperty(propname, null);
}
    }  
问候

您可以在JAX-RS资源类中使用PostConstruct方法

@PostConstruct
private void init() {
   /initialize...
}
然而,我不确定应用程序定义单例是否是一个好主意。如果您使用的是JavaEE环境,则可以使用ApplicationScoped bean


如果您不希望总是实例化
ConfigurationProvider
并根据
区域设置缓存
ResourceBundle
,请创建一个
ConfigurationProvider
单例。这样,您就不必每次需要时都重新加载属性文件。@BuhakeSindi,我想ConfigurationProvider已经是singleton了。我正在静态块中初始化配置&有一个私有构造函数。获取实例的唯一方法是从getInstance方法。这是否允许访问helpers方法中的ConfigurationProvider以及resource类之外的其他方法?我不确定,在Java EE服务器中定义单例的应用程序是否是一种好的做法。您可以使用ApplicationScoped bean来代替。我将编辑我的答案以反映这一点。我认为ApplicationScoped不适用于JavaEE5。我们有什么EE5