Sobes.tech
Middle

È possibile creare due Singleton in Spring?

sobes.tech AI

Risposta dell'AI

Sì, la possibilità esiste, anche se ciò contraddice l'obiettivo principale del pattern Singleton (una sola istanza). In Spring, ciò si ottiene tramite i seguenti meccanismi:

  1. Contesti Spring diversi: Se hai due contesti Spring differenti (ad esempio, in un'applicazione monolitica suddivisa in moduli, ognuno con il proprio contesto, o in un sistema distribuito in cui ogni servizio ha il proprio contesto), ogni contesto può contenere la propria istanza di un bean Singleton.

  2. Scope prototype: Sebbene di default lo scope per i bean in Spring sia singleton, puoi esplicitamente specificare scope="prototype" per un determinato bean. Spring creerà così una nuova istanza di quel bean ad ogni richiesta.

    // Esempio di configurazione Spring
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // Specifica scope `prototype`
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Esempio di bean
    public class MyPrototypeBean {
        // ...
    }
    
  3. Collegamento con librerie che hanno i propri contesti: Se la tua applicazione utilizza librerie che inizializzano i propri contesti Spring e registrano in essi bean Singleton, allora nella tua applicazione principale e in questa libreria può esserci un'istanza della stessa classe, registrata come Singleton in ogni contesto.

È importante capire che creare più istanze di una classe pensata come Singleton spesso indica un problema potenziale nell'architettura o un uso scorretto del pattern. Normalmente, se sono necessarie più istanze, lo scope Singleton non è appropriato.