Nehmen wir das einfachste Beispiel: Sie haben eine Anwendung und verwenden nur den Standardklassenlader. Sie haben eine Klasse, die aus irgendeinem Grund entscheidet, dass sie nicht mehr als eine Instanz in der Anwendung enthalten soll. (Stellen Sie sich ein Szenario vor, in dem mehrere Personen an Teilen der Anwendung arbeiten.)
Wenn Sie das Spring-Framework nicht verwenden, stellt das Singleton-Muster sicher, dass Ihre Anwendung nicht mehr als eine Instanz einer Klasse enthält. Dies liegt daran, dass Sie Instanzen der Klasse nicht instanziieren können, indem Sie 'new' ausführen, da der Konstruktor privat ist. Die einzige Möglichkeit, eine Instanz der Klasse abzurufen, besteht darin, eine statische Methode der Klasse (normalerweise 'getInstance' genannt) aufzurufen, die immer dieselbe Instanz zurückgibt.
Wenn Sie sagen, dass Sie das Spring-Framework in Ihrer Anwendung verwenden, bedeutet dies nur, dass Sie Spring 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 bitten können, Sie zu erhalten Eine Instanz dieser Klasse und Spring stellen sicher, dass immer dann, wenn Sie nach einer Instanz dieser Klasse fragen, dieselbe Instanz zurückgegeben wird, auch wenn Sie die Klasse nicht mit dem Singleton-Muster geschrieben haben. Mit anderen Worten, selbst wenn die Klasse einen öffentlichen Konstruktor hat und Spring immer nach einer Instanz dieser Klasse fragt, ruft Spring diesen Konstruktor während der Lebensdauer Ihrer Anwendung nur einmal auf.
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. Wenn Ihr Konstruktor jedoch nicht privat ist, verhindern Sie nicht wirklich, dass jemand direkt neue Instanzen der Klasse erstellt, indem Sie Spring umgehen.
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 die Klasse auch mithilfe des Singleton-Musters implementiert wird. Dies stellt sicher, dass es eine einzelne Instanz gibt, unabhängig davon, ob Benutzer Spring verwenden, um eine Instanz abzurufen, oder Spring umgehen.