Sobes.tech
Middle

Lehetőség van két Singleton létrehozására Springben?

sobes.tech MI

Válasz az MI-től

Igen, a lehetőség fennáll, bár ez ellentmond a Singleton mintázat (egyetlen példány) fő céljának. A Springben ez a következő mechanizmusokon keresztül érhető el:

  1. Különböző Spring kontextusok: Ha két különböző Spring kontextusod van (például egy monolitikus alkalmazásban, modulokra bontva, mindegyik saját kontextussal, vagy elosztott rendszerben, ahol minden szolgáltatásnak saját kontextusa van), akkor minden kontextus tartalmazhat saját Singleton-béla példányt.

  2. prototype scope: Bár alapértelmezés szerint a Springben a beanek scope-ja singleton, kifejezetten megadhatod a scope="prototype" értéket egy adott bean esetében. Ekkor a Spring minden kérésnél új példányt hoz létre.

    // Spring konfigurációs példa
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // A scope `prototype` megadása
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Bean példa
    public class MyPrototypeBean {
        // ...
    }
    
  3. Könyvtárak saját kontextusai: Ha az alkalmazásod olyan könyvtárakat használ, amelyek saját Spring kontextusokat inicializálnak és ezekben Singleton-beanokat regisztrálnak, akkor a fő alkalmazásban és ebben a könyvtárban is lehet egy példány ugyanabból a osztályból, mindegyik kontextusban Singleton-ként regisztrálva.

Fontos megérteni, hogy az olyan osztály több példányának létrehozása, amelyet Singleton-ként terveztek, gyakran egy potenciális problémára utal az architektúrában vagy a minta helytelen használatára. Általában, ha több példányra van szükség, a Singleton scope nem megfelelő.