Gibt es die Möglichkeit, zwei Singleton in Spring zu erstellen?
sobes.tech KI
Antwort von AI
Ja, die Möglichkeit besteht, obwohl dies dem Hauptzweck des Singleton-Musters (einzige Instanz) widerspricht. In Spring wird dies durch folgende Mechanismen erreicht:
-
Verschiedene Spring-Kontexte: Wenn Sie zwei verschiedene Spring-Kontexte haben (z.B. in einer monolithischen Anwendung, die in Module unterteilt ist, jeder mit seinem eigenen Kontext, oder in einem verteilten System, in dem jeder Dienst seinen eigenen Kontext hat), kann jeder Kontext seine eigene Instanz eines Singleton-Beans enthalten.
-
Scope
prototype: Obwohl standardmäßig derscopefür Beans in Springsingletonist, können Sie explizitscope="prototype"für ein bestimmtes Bean angeben. Spring wird dann bei jeder Anfrage eine neue Instanz dieses Beans erstellen.// Beispiel für Spring-Konfiguration @Configuration public class AppConfig { @Bean @Scope("prototype") // Scope `prototype` angeben public MyPrototypeBean myPrototypeBean() { return new MyPrototypeBean(); } } // Beispiel für Bean public class MyPrototypeBean { // ... } -
Verbindung mit Bibliotheken, die ihre eigenen Kontexte haben: Wenn Ihre Anwendung Bibliotheken verwendet, die ihre eigenen Spring-Kontexte initialisieren und darin Singleton-Beans registrieren, kann es in Ihrer Hauptanwendung und in dieser Bibliothek jeweils eine Instanz derselben Klasse geben, die in jedem Kontext als Singleton registriert ist.
Es ist wichtig zu verstehen, dass die Erstellung mehrerer Instanzen einer Klasse, die als Singleton gedacht ist, oft auf ein potenzielles Problem in der Architektur oder auf eine falsche Verwendung des Musters hinweist. Normalerweise ist der Scope singleton ungeeignet, wenn mehr als eine Instanz benötigt wird.