2013-02-18 42 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