Sobes.tech
Middle

Ar yra galimybė sukurti du Singleton Spring'e?

sobes.tech AI

Atsakymas iš AI

Taip, galimybė egzistuoja, nors tai prieštarauja pagrindiniam Singleton (vieno egzemplioriaus) šablono tikslui. Spring tai pasiekiama naudojant šiuos mechanizmus:

  1. Skirtingi Spring kontekstai: Jei turite du skirtingus Spring kontekstus (pavyzdžiui, monolitinėje programoje, padalintoje į modulius, kiekvienas su savo kontekstu, arba paskirstytoje sistemoje, kur kiekvienas paslaugų turi savo kontekstą), kiekvienas kontekstas gali turėti savo Singleton-bino egzempliorių.

  2. Scope prototype: Nors pagal nutylėjimą scope Spring biuose yra singleton, galite aiškiai nurodyti scope="prototype" tam tikram binui. Spring tada sukurs naują šio binio egzempliorių kiekvieno užklausos metu.

    // Spring konfigūracijos pavyzdys
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // Nurodome scope kaip prototype
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Bino pavyzdys
    public class MyPrototypeBean {
        // ...
    }
    
  3. Bibliotekų susiejimas su jų pačių kontekstais: Jei jūsų programa naudoja bibliotekas, kurios pačios inicijuoja savo kontekstus Spring ir registruoja juose Singleton-binus, tai jūsų pagrindinėje programoje ir šioje bibliotekoje gali būti po vieną to paties klasės egzempliorių, registruotą kaip Singleton kiekviename kontekste.

Svarbu suprasti, kad kelių egzempliorių kūrimas iš klasės, kuri buvo sukurta kaip Singleton, dažnai rodo potencialią architektūros problemą arba netinkamą šablono naudojimą. Paprastai, jei reikalingas daugiau nei vienas egzempliorius, Singleton scope yra netinkamas.