Sobes.tech
Middle

Da li postoji mogućnost da se kreiraju dva Singleton u Springu?

sobes.tech АИ

Одговор од АИ

Da, mogućnost postoji, iako to protivreči osnovnom cilju Singleton šablona (jedan primerak). U Spring-u, to se postiže sledećim mehanizmima:

  1. Različiti Spring konteksti: Ako imate dva različita Spring konteksta (na primer, u monolitnoj aplikaciji podeljenoj na module, svaki sa svojim kontekstom, ili u distribuiranom sistemu gde svaki servis ima svoj kontekst), svaki kontekst može sadržavati svoj primerak Singleton beana.

  2. Scope prototype: Iako je podrazumevano da je scope za beane u Spring-u singleton, možete eksplicitno navesti scope="prototype" za određeni bean. Spring će tada kreirati novi primerak tog beana pri svakom zahtevu.

    // Primer konfiguracije Spring
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // Navodimo scope `prototype`
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Primer beana
    public class MyPrototypeBean {
        // ...
    }
    
  3. Povezivanje sa bibliotekama koje imaju svoje kontekste: Ako vaša aplikacija koristi biblioteke koje same inicijalizuju svoje kontekste Spring i registruju u njima Singleton-beanove, onda u vašoj glavnoj aplikaciji i u toj biblioteci može postojati po jedan primerak iste klase, registrovan kao Singleton u svakom od konteksta.

Važno je razumeti da kreiranje više primeraka klase, koja je zamišljena kao Singleton, često ukazuje na potencijalni problem u arhitekturi ili pogrešnu upotrebu šablona. Obično, ako je potrebno više od jednog primerka, scope Singleton nije odgovarajući.