2017-04-19 3 views
0

Singleton Instanz wird per ClassLoader erstellt. Im Gegensatz zu Singleton erstellt ClassLoader ein anderes Objekt immer dann, wenn eine Objekt-Erstellung dieser Klasse auftritt, wenn diese Klasse keine Singleton ist.mehrere Objekt vs Singleton-Objekt pro Sitzung

Meine Frage ist: Kann 'n' Anzahl der Objekte für eine Klasse pro Sitzung sein?

+0

was ist eine 'Sitzung'? –

+0

ClassLoaders behandeln weder die Instanziierung von Objekten noch die Initialisierung von Klassen. Alles, was sie tun, ist * Laden * Klassen und bieten Zugriff auf Ressourcen. Noch ist "Singleton" ein Klassenmerkmal, das inhärent von Java erkannt wird; es ist vielmehr eine Charakterisierung der Implementierungen einiger Klassen. –

+0

Was möchten Sie wirklich wissen? Gibt es mehr als eine Instanz einer Nicht-Singleton-Klasse? Die Antwort sollte ziemlich offensichtlich sein, oder? –

Antwort

1

Es gibt drei Dinge, die passieren müssen, bevor Sie „verwenden“ eine Instanz einer Klasse kann, von denen jede Zuweisung von Heap-Speicher beinhaltet:

Die Klassen-Bytecode müssen geladen und verknüpft werden jede lösen statische Abhängigkeiten von anderen Klassen. Die Klasse muss initialisiert werden. Eine Instanz der Klasse muss erstellt werden. Das Laden und Verknüpfen von Klassen erfolgt normalerweise beim Starten der JVM, obwohl dies von der JVM "träge" ausgeführt werden kann, und zwar dynamisch; z.B. Verwenden von Class.forName (...). Dies ist, wenn Speicher für die Klassen "Code" zugewiesen ist.

Die Klasseninitialisierung wird normalerweise unmittelbar vor dem ersten Mal ausgeführt, an dem die Klasse tatsächlich verwendet wird. (Die genauen Einzelheiten sind in der JLS dargelegt). Dies ist der Fall, wenn Speicher für eine Klassenstatik zugewiesen wird.

Die Klassenerstellung erfolgt, wenn das neue Konstrukt verwendet wird. Dies löst auch die Klasseninitialisierung für eine Klasse aus, die noch nicht initialisiert wurde. Dies ist der Fall, wenn Speicher für eine Instanz zugewiesen wird

0

Ja, Sie können zwei Objekte der Nicht-Singleton-Klasse im Sitzungsumfang haben.

0

Wenn Sie sicherstellen möchten, dass Ihre Sitzung eine n Anzahl von Instanzen Ihrer Klasse hat und nicht mehr, dann liegt es an Ihnen, ein solches Verhalten zu implementieren. Das gleiche wie Singleton. Java bietet keinen Mechanismus, um die Singleton-Musterimplementierung sicherzustellen. Es ist entweder ein Programmierer oder ein Framework, das das kann. Wenn Sie also eine vordefinierte Anzahl von Instanzen Ihrer Klasse haben möchten, liegt dies in Ihrer Verantwortung. Hier ist die einfachste Idee:

 public class MyTest { 
      private static List<MyTest> instances = new ArrayList<>(5); 
      static { 
       for(int i = 0; i < 5; i++) { 
        instances.add(new MyTest()); 
       } 
      } 

      public static MyTest getInstance() { 
       return instances.get(3 /*or whatever logic to determine which one/*); 
      } 

     ... 
     }