2016-06-07 3 views
-1

У меня есть одноэлементный класс, который читает некоторые свойства из xml-файла, который имеет довольно большое количество элементов. В настоящее время я читаю XML-файл внутри конструктор одноэлементного класса. как только записи в xml будут прочитаны, я могу получить доступ к ним из экземпляра singleton без необходимости читать xml снова и снова. Я хотел бы знать, является ли это правильным подходом или есть лучший способ сделать это, чем это.Каков наилучший способ чтения большого xml-файла в одноэлементном классе

+3

До тех пор, пока ваш XML будет прочитан до того, как экземпляр singleton будет возвращен вызывающему коду, где именно вы это делаете (конструктор, статический инициализатор, частный метод инициализации) не имеет большого значения. – Thilo

ответ

1

Если вы хотите лениво загрузить свойства, вы можете написать класс, как показано ниже, он будет работать и в многопоточной среде.

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) 
     } 
    } 
} 
Смежные вопросы