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



## Amios (24. Jan 2011)

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


----------



## Taggert (24. Jan 2011)

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?


----------



## Wildcard (24. Jan 2011)

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?


----------



## Amios (24. Jan 2011)

Ich möchte auch nur gerne eine Möglichkeit, wie ich das Problem bewältigen kann.


----------



## Gastredner (25. Jan 2011)

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.


----------



## Tomate_Salat (25. Jan 2011)

Amios hat gesagt.:


> Ich möchte auch nur gerne eine Möglichkeit, wie ich das Problem bewältigen kann.



Hat man dir doch schon mitgeteilt:
Verwende ein DI-Framework. Beispielsweise: google-guice - Project Hosting on Google Code. Aus eigener Erfahrung: einfach zu verstehen und man kann sich schnell reinarbeiten.


----------



## diel2001 (25. Jan 2011)

Les das Object doch über die Methode getInstance() ein und wenn es existiert, wird ein flag abgefragt, ob es das Object schon gibt.


----------



## ARadauer (25. Jan 2011)

> 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)...

```
public class Config {
   
   public static Config INSTANCE = new Config(); 
   
   
   public static void reInit(){
      INSTANCE = new Config();
   }
   private Config(){
      init();
   }
   
   private synchronized void init(){
      //einlesen...
   }

}
```


----------



## tuttle64 (25. Jan 2011)

Amios hat gesagt.:


> 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.


----------



## tfa (25. Jan 2011)

ARadauer hat gesagt.:


> ja wo ist das problem?
> 
> oder so ähnlich.... (ohne rücksicht auf irgendwelche singleton detail probleme)...
> 
> ...


Lieber nicht. Das ist jetzt kein Singleton mehr. Aber da die ja sowieso problematisch sind: nimm lieber DI.


----------



## tuttle64 (25. Jan 2011)

tfa hat gesagt.:


> 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? Vorweg: DI kenne ich nicht.


----------



## tfa (25. Jan 2011)

tuttle64 hat gesagt.:


> 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.


----------



## ARadauer (25. Jan 2011)

Inversion of Control Containers and the Dependency Injection pattern


----------



## maki (25. Jan 2011)

Hier ein Artikel von Fowler über DI (Depdency Injection): Inversion of Control Containers and the Dependency Injection pattern



tfa hat gesagt.:


> Lieber nicht. *Das ist jetzt kein Singleton mehr. *Aber da die ja sowieso problematisch sind: nimm lieber DI.


Ich kaufe ein "GLOBALE VARIABLE" und möchte lösen


----------

