Datei als Object einlesen und das Object als Singleton instance setzen.

Amios

Mitglied
Hallo,

Ich denke, dass dieses eine sehr eigenartige Frage ist. Vielleicht gibt es auch eine andere Möglichkeit meine Problematik zu lösen. Ich beschreibe erst einmal das Problem.

Ich würde gerne eine Configurations-Datei (ConfigurationBean)anlegen. Diese ist in XML verfasst und enthällt alle wichtigen Informationen.

*Die Datei soll einmal eingelesen werden (jedoch nur 1mal auf dem System als Instance vorhanden sein).

*Ich möchte die Informationen des ConfigurationBeans ansprechen können wie die Daten in einer statischen Klasse.

Also dachte ich mir, könnte die class des ConfigurationBeans als singleTon aufsetzen.
Nun müsste ich nur noch, wenn ich die ConfigurationsDatei lese die vorherige ConfigurationBean-Instance ersetzen.

Doch wie? Oder ist das alles mal wieder zu kompliziert gedacht?

Danke
 
Versteh ich nicht .... so ganz und gar nicht.

Durch das Singelton hast Du ja nur eine Instanz von Deiner Klasse und nicht mehrere - also was für eine "alte" Instanz willst Du löschen/ersetzen?
 
Ein Singleton (ausserhalb von DI) ist fast immer der falsche Weg. Singleton sollte keine Eigenschaft der Klasse sein, sondern die Art wie ein Objekt verwendet wird, daher ist Singleton im GoF Sinne auch mittlerweile mehr ein Antipattern als ein Pattern.
Verwendest du ein DI Framework? Wenn nein, warum nicht?
 
Wieso musst du die Singleton-Instanz ersetzen? Biete einfach eine Methode an, die Datei neu auszulesen und rufe diese bei der ersten Instanziierung durch die Klasse selbst auf.
 
Les das Object doch über die Methode getInstance() ein und wenn es existiert, wird ein flag abgefragt, ob es das Object schon gibt.
 
Also dachte ich mir, könnte die class des ConfigurationBeans als singleTon aufsetzen.
Nun müsste ich nur noch, wenn ich die ConfigurationsDatei lese die vorherige ConfigurationBean-Instance ersetzen.
ja wo ist das problem?

oder so ähnlich.... (ohne rücksicht auf irgendwelche singleton detail probleme)...
Java:
public class Config {
   
   public static Config INSTANCE = new Config(); 
   
   
   public static void reInit(){
      INSTANCE = new Config();
   }
   private Config(){
      init();
   }
   
   private synchronized void init(){
      //einlesen...
   }

}
 
Zuletzt bearbeitet:
Doch wie? Oder ist das alles mal wieder zu kompliziert gedacht?


In Java gibt es sogenannte static-blöcke, welche nur ein mal beim beim Laden der Klasse ausgeführt werden. Weiterführende Informationen findest Du z.B. hier. Zudem, wenn Du des englischen mächtig bist, findest Du eine m.E. interessante Einführung in Java Persistence mit XLS hier. Viel Spass.
 
ja wo ist das problem?

oder so ähnlich.... (ohne rücksicht auf irgendwelche singleton detail probleme)...
Java:
public class Config {
   
   public static Config INSTANCE = new Config(); 
   
   
   public static void reInit(){
      INSTANCE = new Config();
   }
   private Config(){
      init();
   }
   
   private synchronized void init(){
      //einlesen...
   }

}
Lieber nicht. Das ist jetzt kein Singleton mehr. Aber da die ja sowieso problematisch sind: nimm lieber DI.
 
Warum ein neues Framework verwenden, wenn ein Problem mit den vorhandenen Java-Klassen lösbar ist?
Da Frameworks auch nur mit Java gemacht werden, ist jedes Problem mit den vorhandenen Java-Klassen lösbar. Aber warum das Rad neu erfinden? Zumal dieses Rad recht teuer und eckig ist, wo es runde, billige Räder an jeder Ecke gibt?

Vorweg: DI kenne ich nicht.
Das solltest du ändern.
 

Zurück
Oben