Nehmen wir das einfachste Beispiel: Sie haben eine Anwendung und Sie verwenden nur den Standard-Classloader. Sie haben eine Klasse, die aus irgendeinem Grund entscheidet, dass nicht mehr als eine Instanz in der Anwendung enthalten sein soll. (Denken Sie an ein Szenario, in dem mehrere Personen an Teilen der Anwendung arbeiten).
Wenn Sie das Spring-Framework nicht verwenden, stellt das Singleton-Muster sicher, dass in Ihrer Anwendung nicht mehr als eine Instanz einer Klasse vorhanden ist. Das liegt daran, dass Sie Instanzen der Klasse nicht instanziieren können, indem Sie "neu" ausführen, da der Konstruktor privat ist. Die einzige Möglichkeit, eine Instanz der Klasse zu erhalten, besteht darin, eine statische Methode der Klasse aufzurufen (normalerweise 'getInstance' genannt), die immer dieselbe Instanz zurückgibt.
Die Angabe, dass Sie das Spring-Framework in Ihrer Anwendung verwenden, bedeutet nur, dass Sie zusätzlich zu den regulären Methoden zum Abrufen einer Instanz der Klasse (neue oder statische Methoden, die eine Instanz der Klasse zurückgeben) auch fragen können Spring, um eine Instanz dieser Klasse zu erhalten, und Spring stellt sicher, dass immer, wenn Sie nach einer Instanz dieser Klasse fragen, immer dieselbe Instanz zurückgibt, auch wenn Sie die Klasse nicht mit dem Singleton-Muster geschrieben haben. Mit anderen Worten, selbst wenn die Klasse einen öffentlichen Konstruktor hat, wird Spring diesen Spring-Konstruktor nur einmal während der Laufzeit Ihrer Anwendung aufrufen, wenn Sie Spring immer nach einer Instanz dieser Klasse fragen.
Wenn Sie Spring verwenden, sollten Sie Spring normalerweise nur zum Erstellen von Instanzen verwenden, und Sie können einen öffentlichen Konstruktor für die Klasse haben. Aber wenn Ihr Konstruktor nicht privat ist, verhindern Sie nicht wirklich, dass jemand direkt neue Instanzen der Klasse erzeugt, indem er Spring umgeht.
Wenn Sie wirklich eine einzelne Instanz der Klasse möchten, auch wenn Sie Spring in Ihrer Anwendung verwenden und die Klasse in Spring als Singleton definieren, können Sie nur sicherstellen, dass auch die Klasse mithilfe des Singleton-Musters implementiert wird. Dies stellt sicher, dass es eine einzige Instanz gibt, ob Benutzer Spring verwenden, um eine Instanz abzurufen oder Spring zu umgehen.
Korrigieren Sie mich, wenn ich falsch liege, also nach Ihnen, wenn ich jedes Objekt als Singleton implementieren muss, so gibt es keine Notwendigkeit, Singleton-Muster zu implementieren. Das Erstellen dieser Bean mithilfe von Spring funktioniert.Ich bin ein wenig verwirrt jetzt mit meinem Verständnis in Bezug auf Singleton Design-Muster und Singleton Umfang in Spring-Framework. – Peeyush
Spring zwingt Sie nicht, das Singleton-Muster zu verwenden. – lexicore