Sobes.tech
Middle

Is het mogelijk om twee Singleton in Spring te creëren?

sobes.tech AI

Antwoord van AI

Ja, de mogelijkheid bestaat, hoewel dit in tegenspraak is met het hoofddoel van het Singleton-patroon (één exemplaar). In Spring wordt dit bereikt door de volgende mechanismen:

  1. Verschillende Spring-omgevingen: Als je twee verschillende Spring-omgevingen hebt (bijvoorbeeld in een monolithische applicatie die in modules is verdeeld, elk met zijn eigen omgeving, of in een gedistribueerd systeem waar elke service zijn eigen omgeving heeft), kan elke omgeving zijn eigen instantie van een Singleton-bean bevatten.

  2. Scope prototype: Hoewel standaard de scope voor beans in Spring singleton is, kun je expliciet scope="prototype" specificeren voor een bepaald bean. Spring zal dan bij elke aanvraag een nieuwe instantie van dat bean maken.

    // Voorbeeld van Spring-configuratie
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // Scope `prototype` specificeren
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Voorbeeld van een bean
    public class MyPrototypeBean {
        // ...
    }
    
  3. Koppeling met bibliotheken die hun eigen contexten hebben: Als je applicatie bibliotheken gebruikt die hun eigen Spring-omgevingen initialiseren en daarin Singleton-beans registreren, dan kan er in je hoofdapplicatie en in die bibliotheek elk een exemplaar van dezelfde klasse zijn, geregistreerd als Singleton in elk van de contexten.

Het is belangrijk te begrijpen dat het creëren van meerdere exemplaren van een klasse die als Singleton bedoeld is, vaak wijst op een potentieel probleem in de architectuur of verkeerd gebruik van het patroon. Gewoonlijk, als meer dan één exemplaar nodig is, is de scope singleton niet geschikt.