Sobes.tech
Middle

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:

  1. 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.

  2. Scope prototype: Obwohl standardmäßig der scope für Beans in Spring singleton ist, können Sie explizit scope="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 {
        // ...
    }
    
  3. 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.