2013-02-18 16 views
0

我们正在使用基于JAX-RS的webapp &,它需要从属性文件读取一些配置。我写了一个ConfigurationProvider helper类来加载这些属性。这个类将被用于多个类。我的问题是&什么时候ConfigurationProvider应该被初始化?何时初始化Java EE webapp中的属性?

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); 
} 
    } 

问候

+0

创建ConfigurationProvider'的'一个单身,如果你不想总是实例并具有基于他们的'Locale' ResourceBundle'的'高速缓存。这样,您不必每次都需要重新加载属性文件。 – 2013-02-18 05:26:59

+0

@BuhakeSindi,我猜ConfigurationProvider已经是单身人士。我正在初始化配置静态块&有一个私人的构造函数。 getInstance方法只能获取实例。 – 2013-02-18 06:14:19

回答

1

http://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.html

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

@PostConstruct 
private void init() { 
    /initialize... 
} 

但是,我不确定定义单例的应用程序是一个好主意。如果您使用的是Java EE环境,则可以使用ApplicationScoped bean。

http://docs.oracle.com/javaee/6/api/javax/enterprise/context/ApplicationScoped.html

+0

这是否允许访问Helper方法中的ConfigurationProvider以及资源类? – 2013-02-18 07:32:27

+0

我不确定,如果在Java EE服务器中定义单例的应用程序是一种很好的做法。你可以做的是使用ApplicationScoped bean来代替。我将编辑我的答案以反映这一点。 – chitakasa 2013-02-18 10:45:40

+0

我不认为ApplicationScoped适用于Java EE 5.我们对EE5有什么要求 – 2013-02-18 16:55:53