Sobes.tech
Middle

Existuje možnosť vytvoriť dva Singleton v Spring?

sobes.tech AI

Odpoveď od AI

Áno, možnosť existuje, hoci to odporuje hlavnému cieľu vzoru Singleton (jeden exemplár). V Springu je to dosiahnute prostredníctvom nasledujúcich mechanizmov:

  1. Rôzne kontexty Spring: Ak máte dva rôzne kontexty Spring (napríklad v monolitickej aplikácii rozdelenej na moduly, každý s vlastným kontextom, alebo v distribuovanom systéme, kde každý servis má svoj vlastný kontext), každý kontext môže obsahovať vlastný exemplár Singleton-bean.

  2. Scope prototype: Hoci je predvolene scope pre beany v Springu singleton, môžete explicitne určiť scope="prototype" pre konkrétny bean. Spring potom vytvorí nový exemplár tohto beana pri každom požiadavke.

    // Príklad konfigurácie Spring
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // Určenie scope `prototype`
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Príklad beana
    public class MyPrototypeBean {
        // ...
    }
    
  3. Prepojenie s knižnicami, ktoré majú vlastné kontexty: Ak vaša aplikácia používa knižnice, ktoré samy inicializujú vlastné kontexty Spring a registrujú v nich Singleton-beany, potom vo vašej hlavnej aplikácii a v tejto knižnici môže byť po jednom exemplári tej istej triedy, zaregistrovanom ako Singleton v každom z kontextov.

Je dôležité pochopiť, že vytváranie viacerých exemplárov triedy, ktorá bola navrhnutá ako Singleton, často naznačuje potenciálny problém v architektúre alebo nesprávne použitie vzoru. Zvyčajne, ak je potrebných viac ako jeden exemplár, scope singleton nie je vhodný.