Sobes.tech
Middle

Spring-də iki Singleton yaratmaq mümkündürmü?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, imkan mövcuddur, baxmayaraq ki, bu, Singleton (yalnız bir nümunə) nümunəsinin əsas məqsədinə ziddir. Spring-də bu, aşağıdakı mexanizmlərlə həyata keçirilir:

  1. Fərqli Spring kontekstləri: Əgər iki fərqli Spring kontekstiniz varsa (məsələn, modullara bölünmüş monolit tətbiqində, hər biri öz kontekstinə malik və ya paylanmış sistemdə, hər xidmətin öz konteksti varsa), hər bir kontekst öz Singleton-bina nümunəsini saxlaya bilər.

  2. prototype scope: Spring-də beanın scope-u standart olaraq singleton olsa da, siz açıq şəkildə scope="prototype" göstərə bilərsiniz. Spring hər sorğuda bu bina üçün yeni nümunə yaradacaq.

    // Spring konfiqurasiyası nümunəsi
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // `prototype` scope-u göstərin
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Bina nümunəsi
    public class MyPrototypeBean {
        // ...
    }
    
  3. Kitabxanalarla əlaqə və onların öz kontekstləri: Əgər tətbiqiniz, öz Spring kontekstlərini başlatan və orada Singleton-bina qeydiyyatdan keçirən kitabxanalar istifadə edirsə, onda əsas tətbiqinizdə və bu kitabxanada eyni sinfin nümunəsi ola bilər, hər bir kontekstdə Singleton kimi qeydiyyatdan keçmiş.

Əhəmiyyətlidir ki, Singleton kimi nəzərdə tutulan sinfin bir neçə nümunəsinin yaradılması, tez-tez arxitekturada potensial problemə və ya şablonun yanlış istifadəsinə işarə edir. Adətən, əgər birdən çox nümunəyə ehtiyac varsa, Singleton scope-u uyğun deyil.