zu lesen Ich habe eine Singleton-Klasse, die einige Eigenschaften aus einer XML-Datei lesen, die eine ziemlich große Anzahl von Elementen hat.Zurzeit lese ich die XML-Datei in der Konstruktor der Singleton-Klasse. Sobald die Einträge in der XML-Datei gelesen wurden, kann ich auf diese von der Singleton-Instanz zugreifen, ohne die XML-Datei immer wieder lesen zu müssen. Ich würde gerne wissen, ob dies ein richtiger Ansatz ist oder gibt es einen besseren Weg, um es zu erledigen.Was ist der beste Weg, um eine große XML-Datei in einer Singleton-Klasse
-1
A
Antwort
1
Wenn Sie die Eigenschaften lazy laden möchten, können Sie die Klasse wie folgt schreiben, es wird auch in Multi-Thread-Umgebung funktionieren.
class Singleton {
private static Singleton instance;
private Properties xmlProperties;
private Singleton() {}
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
public Properties getXmlProperties() {
if(xmlProperties == null) {
initProperties();
}
return xmlProperties;
}
private synchronized void initProperties() {
if(xmlProperties == null) {
//Initialize the properties from Xml properties file
// xmlProperties = (Properties from XML file)
}
}
}
Solange Ihr XML gelesen wird, bevor die Singleton-Instanz an aufrufenden Code zurückgegeben wird, ist es nicht wichtig, wo genau Sie das tun (Konstruktor, statischer Initialisierer, private Init-Methode). – Thilo