Sobes.tech
Middle

Existuje možnost vytvořit dva Singletony ve Springu?

sobes.tech AI

Odpověď od AI

Ano, možnost existuje, i když to odporuje hlavnímu cíli vzoru Singleton (jediný výskyt). V Springu je to dosažitelné pomocí následujících mechanismů:

  1. Různé kontexty Spring: Pokud máte dva různé kontexty Spring (například v monolitické aplikaci rozdělené do modulů, každý s vlastním kontextem, nebo v distribuovaném systému, kde každý servis má svůj vlastní kontext), každý kontext může obsahovat vlastní instanci Singleton-beanu.

  2. Scope prototype: Ačkoliv výchozí scope pro beany ve Springu je singleton, můžete explicitně určit scope="prototype" pro konkrétní bean. Spring pak vytvoří novou instanci tohoto beanu při každé žádosti.

    // Příklad konfigurace Spring
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // Určení scope `prototype`
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Příklad beanu
    public class MyPrototypeBean {
        // ...
    }
    
  3. Propojení s knihovnami, které mají vlastní kontexty: Pokud vaše aplikace používá knihovny, které samy inicializují své vlastní kontexty Spring a registrují v nich Singleton-beany, pak ve vaší hlavní aplikaci a v této knihovně může být po jednom výskytu stejné třídy, zaregistrované jako Singleton v každém z kontextů.

Je důležité pochopit, že vytváření více výskytů třídy, která byla navržena jako Singleton, často naznačuje potenciální problém v architektuře nebo nesprávné použití vzoru. Obvykle, pokud je potřeba více než jeden výskyt, scope Singleton není vhodný.