È 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:
-
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.
-
Scope
prototype: Sebbene di default loscopeper i bean in Spring siasingleton, puoi esplicitamente specificarescope="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 { // ... } -
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.