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:
-
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.
-
Scope
prototype: Hoewel standaard descopevoor beans in Springsingletonis, kun je explicietscope="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 { // ... } -
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.