java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 19.03.2009, 10:39   #1 (permalink)
Neuer Benutzer
Byte
 
Registriert seit: 19.03.2009
Beiträge: 8
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Denkfehler Singleton

Ich hab hier das Grundgerüst eines einfachen Singletons.

Code:
public class Singleton
{ 
  private static Singleton instance = new Singleton(); 
 
  private Singleton() 
  { 
  } 
 
  public static Singleton getInstance() 
  { 
    return instance; 
  } 
 
}
Meine Frage dazu ist:
Die Eigenschaft instance ist ja ein Objekt der Klasse Singleton. Imho müsste dieses Objekt wieder eine Eigenschaft instance besitzen usw. Offensichtlich ist das nicht der Fall, sonst hätte man ja eine Endlosschleife. Wie kann das sein?
dable ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:41   #2 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Benutzerbild von Noctarius
 
Registriert seit: 17.08.2007
Beiträge: 4.172
Abgegebene Danke: 4
Erhielt 173 Danke für 167 Beiträge
Weil Sie dank static einmal in der Klasse existiert nicht in der Instanz die du erstellst

instance.getClass() hätte wieder die Instanz
Noctarius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:42   #3 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 13.09.2007
Beiträge: 8.573
Abgegebene Danke: 7
Erhielt 155 Danke für 153 Beiträge
>> Denkfehler Singleton

Sehr wahr, Singleton ist ein Anti-Pattern.

>> Imho müsste dieses Objekt wieder eine Eigenschaft instance besitzen usw. Offensichtlich ist das nicht der Fall,

Nicht das Objekt, sondern die Klasse, weil instance static ist.
maki ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:43   #4 (permalink)
Neuer Benutzer
Byte
Themenstarter
 
Registriert seit: 19.03.2009
Beiträge: 8
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
ok danke!
wenn die Eigenschaft nicht static wäre, hätte ich aber eine Endlosschleife, oder?
dable ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:45   #5 (permalink)
tfa
Stammbenutzer
Megabyte
 
Benutzerbild von tfa
 
Registriert seit: 19.03.2007
Beiträge: 2.046
Blog-Einträge: 14
Abgegebene Danke: 6
Erhielt 16 Danke für 15 Beiträge
Juchu! Ein Singleton-Thread!
__________________
Snippets: TableLayout - Nichtrechteckige Fenster - SwingWorker - ReadWriteLock - Database ConnectionPool - Synchronisation mit Locks - EventBus - BlockingQueue - RMI - Scripting mit JRuby - Embedded Derby
How-Tos: Remoting mit Spring - Dependency Injection mit Spring
FAQs: Exceptions
tfa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:46   #6 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Benutzerbild von ARadauer
 
Registriert seit: 16.09.2006
Beiträge: 3.748
Abgegebene Danke: 0
Erhielt 62 Danke für 62 Beiträge
kurze zwischenfrage... wenn singleton so "böse" sind, warum sind dann standardmäßig alle "hippen" spring beans singletons..... ?
__________________
Meine Beiträge stehen unter der Beerware Lizenz!
ARadauer ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:47   #7 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Benutzerbild von Noctarius
 
Registriert seit: 17.08.2007
Beiträge: 4.172
Abgegebene Danke: 4
Erhielt 173 Danke für 167 Beiträge
Zitat: ARadauer
Beitrag anzeigen
kurze zwischenfrage... wenn singleton so "böse" sind, warum sind dann standardmäßig alle "hippen" spring beans singletons..... ?
Hehe die Frage hab ich mir schon 5 Singleton Threads lang verkniffen ^^
Noctarius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:49   #8 (permalink)
tfa
Stammbenutzer
Megabyte
 
Benutzerbild von tfa
 
Registriert seit: 19.03.2007
Beiträge: 2.046
Blog-Einträge: 14
Abgegebene Danke: 6
Erhielt 16 Danke für 15 Beiträge
Welche hippen Spring-Beans sollen das denn sein?
__________________
Snippets: TableLayout - Nichtrechteckige Fenster - SwingWorker - ReadWriteLock - Database ConnectionPool - Synchronisation mit Locks - EventBus - BlockingQueue - RMI - Scripting mit JRuby - Embedded Derby
How-Tos: Remoting mit Spring - Dependency Injection mit Spring
FAQs: Exceptions
tfa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:50   #9 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Benutzerbild von Noctarius
 
Registriert seit: 17.08.2007
Beiträge: 4.172
Abgegebene Danke: 4
Erhielt 173 Danke für 167 Beiträge
Alle die nicht anders deklariert sind, werden automatisch als Singleton gehandhabt

scope="prototype"
Noctarius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:52   #10 (permalink)
tfa
Stammbenutzer
Megabyte
 
Benutzerbild von tfa
 
Registriert seit: 19.03.2007
Beiträge: 2.046
Blog-Einträge: 14
Abgegebene Danke: 6
Erhielt 16 Danke für 15 Beiträge
Zitat: Noctarius
Beitrag anzeigen
Alle die nicht anders deklariert sind, werden automatisch als Singleton gehandhabt

scope="prototype"
Das ist allerdings was völlig anderes, als das Singleton-Muster wie in Beitrag #1 angegeben. Das hat damit absolut nichts zu tun.
__________________
Snippets: TableLayout - Nichtrechteckige Fenster - SwingWorker - ReadWriteLock - Database ConnectionPool - Synchronisation mit Locks - EventBus - BlockingQueue - RMI - Scripting mit JRuby - Embedded Derby
How-Tos: Remoting mit Spring - Dependency Injection mit Spring
FAQs: Exceptions
tfa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:53   #11 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Benutzerbild von Noctarius
 
Registriert seit: 17.08.2007
Beiträge: 4.172
Abgegebene Danke: 4
Erhielt 173 Danke für 167 Beiträge
Naja der Effekt ist ansich der Selbe. Es wird genau eine Instanz erstellt. Nur die Art und Weise wie diese Erstellung statt findet ist anders.
Noctarius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:55   #12 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 13.09.2007
Beiträge: 8.573
Abgegebene Danke: 7
Erhielt 155 Danke für 153 Beiträge
Zitat: ARadauer
Beitrag anzeigen
kurze zwischenfrage... wenn singleton so "böse" sind, warum sind dann standardmäßig alle "hippen" spring beans singletons..... ?
Gute Frage

Es git einen Unterschied zwischen einem "semantischem" Singleton (liefert immer dieselbe Instanz) wie Standard Spring Beans und einem syntaktischen Singleton (angeblich nur eine Instanz möglich, kein Interface möglich da statische Methoden, dadurch nicht austauschbar in tests), eben dem klassischen Singleton Krampf -> hardcodierte globale Variable .

Die statische Schnittstelle der syntaktischen Singletons sind das eigentliche Problem, dieses haben die semantischen Singletons eben nicht

Zitat: tfa
Beitrag anzeigen
Juchu! Ein Singleton-Thread!
LMFAO

Geändert von maki (19.03.2009 um 10:57 Uhr)
maki ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:56   #13 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Benutzerbild von byte
 
Registriert seit: 17.06.2005
Beiträge: 4.594
Blog-Einträge: 1
Abgegebene Danke: 7
Erhielt 21 Danke für 19 Beiträge
Das "böse" an Singletons ist ja nicht die Tatsache, dass die Objekte nur einmal existieren dürfen, sondern der statische Zugriff auf die eine Instanz.
Spring Beans existieren per Default nur einmal, aber der statische Zugriff existiert ja nicht.
byte ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:56   #14 (permalink)
tfa
Stammbenutzer
Megabyte
 
Benutzerbild von tfa
 
Registriert seit: 19.03.2007
Beiträge: 2.046
Blog-Einträge: 14
Abgegebene Danke: 6
Erhielt 16 Danke für 15 Beiträge
Zitat: Noctarius
Beitrag anzeigen
Naja der Effekt ist ansich der Selbe. Es wird genau eine Instanz erstellt. Nur die Art und Weise wie diese Erstellung statt findet ist anders.
Nein. Muster "Singleton" bedeutet: es ist garantiert, dass es nur ein Objekt des Typs gibt. Bei scope="singleton" ist das eben nicht der Fall. Du kannst 100 Beans definieren, alle vom selben Typ und alle mit Singleton-Scope.
__________________
Snippets: TableLayout - Nichtrechteckige Fenster - SwingWorker - ReadWriteLock - Database ConnectionPool - Synchronisation mit Locks - EventBus - BlockingQueue - RMI - Scripting mit JRuby - Embedded Derby
How-Tos: Remoting mit Spring - Dependency Injection mit Spring
FAQs: Exceptions
tfa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 10:58   #15 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Benutzerbild von Noctarius
 
Registriert seit: 17.08.2007
Beiträge: 4.172
Abgegebene Danke: 4
Erhielt 173 Danke für 167 Beiträge
Ok mit verschiedenen Ids

Das könnte jetzt genauso eine Grundsatzdiskussion sein, wie ob ein static constructor einmal oder einmal pro classloader ausgeführt wird
Noctarius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 11:00   #16 (permalink)
tfa
Stammbenutzer
Megabyte
 
Benutzerbild von tfa
 
Registriert seit: 19.03.2007
Beiträge: 2.046
Blog-Einträge: 14
Abgegebene Danke: 6
Erhielt 16 Danke für 15 Beiträge
Also den Zusammenhang versteh ich jetzt überhaupt nicht....
__________________
Snippets: TableLayout - Nichtrechteckige Fenster - SwingWorker - ReadWriteLock - Database ConnectionPool - Synchronisation mit Locks - EventBus - BlockingQueue - RMI - Scripting mit JRuby - Embedded Derby
How-Tos: Remoting mit Spring - Dependency Injection mit Spring
FAQs: Exceptions
tfa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 11:02   #17 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Benutzerbild von Noctarius
 
Registriert seit: 17.08.2007
Beiträge: 4.172
Abgegebene Danke: 4
Erhielt 173 Danke für 167 Beiträge
Wenn du nicht 2 verschiedene Beans mit 2 Qualifiern machst wird IMMER das eine Bean zurückgegeben, was genau dem Effekt des Singleton entspricht.

Gestern hatten wir die Diskussion ob ein "static constructor" nur einmal pro Programm ausgeführt wird. Für Anfänger ja. Für Fortgeschrittene nein, weil einmal pro Classloader.

Wenn du also Spring benutzt und jedes Interface nur einmal an ein Bean bindest bleibt der Effekt Singleton-Pattern.
Noctarius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 11:05   #18 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Benutzerbild von byte
 
Registriert seit: 17.06.2005
Beiträge: 4.594
Blog-Einträge: 1
Abgegebene Danke: 7
Erhielt 21 Danke für 19 Beiträge
Zitat: Noctarius
Beitrag anzeigen
Wenn du also Spring benutzt und jedes Interface nur einmal an ein Bean bindest bleibt der Effekt Singleton-Pattern.
Ja, und wenn ich eine Klasse Foobar schreibe und nur einmal new Foobar() aufrufe, dann habe ich auch den Effekt des Singleton-Patterns.
byte ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 11:07   #19 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Benutzerbild von Noctarius
 
Registriert seit: 17.08.2007
Beiträge: 4.172
Abgegebene Danke: 4
Erhielt 173 Danke für 167 Beiträge
Zitat: byto
Beitrag anzeigen
Ja, und wenn ich eine Klasse Foobar schreibe und nur einmal new Foobar() aufrufe, dann habe ich auch den Effekt des Singleton-Patterns.
Nein hast du nicht, weil diese Instanz nicht global erreichbar ist ^^
Noctarius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 19.03.2009, 11:07   #20 (permalink)
tfa
Stammbenutzer
Megabyte
 
Benutzerbild von tfa
 
Registriert seit: 19.03.2007
Beiträge: 2.046
Blog-Einträge: 14
Abgegebene Danke: 6
Erhielt 16 Danke für 15 Beiträge
Zitat: Noctarius
Beitrag anzeigen
Wenn du also Spring benutzt und jedes Interface nur einmal an ein Bean bindest bleibt der Effekt Singleton-Pattern.

Okay, ich glaub ich verstehe. Dann kann man aber auch sagen

Integer eins = new Integer(1);

sei ein Singleton.

(Ich mag Grundsatzdiskussionen )
__________________
Snippets: TableLayout - Nichtrechteckige Fenster - SwingWorker - ReadWriteLock - Database ConnectionPool - Synchronisation mit Locks - EventBus - BlockingQueue - RMI - Scripting mit JRuby - Embedded Derby
How-Tos: Remoting mit Spring - Dependency Injection mit Spring
FAQs: Exceptions
tfa ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Singleton Frage: Allgemeine Java-Themen 17 19.08.2008 15:16
Java Garbage Collector Frage (Singleton Pattern) Mastereye Allgemeine Java-Themen 13 04.03.2008 14:05
singleton Synchronisations Problem? HyperHyper Java Basics - Anfänger-Themen 2 12.10.2006 12:16
Jetspeed@Tomcat Installationsprobleme KSG9|sebastian Server einrichten und konfigurieren 5 23.12.2004 14:10


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:18 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de