Sobes.tech
Middle

Կա հնարավորություն ստեղծել երկու Singleton Spring-ում?

sobes.tech AI

Պատասխան AI-ից

Այո, հնարավոր է, թեև դա հակասում է Singleton (միակ օրինակ) պattern-ի հիմնական նպատակին: Spring-ում դա հասանելի է հետևյալ մեխանիզմների միջոցով:

  1. Տարբեր Spring կոնտեքստներ: Եթե ունեք երկու տարբեր Spring կոնտեքստ (օրինակ՝ մոնոլիտային հավելվածում, բաժանված մոդուլների, յուրաքանչյուրի սեփական կոնտեքստով, կամ բաշխված համակարգում, որտեղ յուրաքանչյուր ծառայություն ունի իր կոնտեքստը), ապա յուրաքանչյուր կոնտեքստ կարող է պարունակել իր սեփական Singleton բին:

  2. prototype scope: Թեև Spring-ում բիների scope-ը ըստ նախնական կարգավորումների singleton է, դուք կարող եք հստակ նշել scope="prototype"՝ կոնկրետ բի համար: Spring-ը այն ժամանակ կստեղծի նոր օրինակ այդ բի համար յուրաքանչյուր հարցում:

    // Spring կոնֆիգուրացիայի օրինակ
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // նշում ենք `prototype` scope
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Բին օրինակ
    public class MyPrototypeBean {
        // ...
    }
    
  3. Գրադարանների հետ կապ, որոնք ունեն իրենց կոնտեքստները: Եթե ձեր հավելվածը օգտագործում է գրադարաններ, որոնք ինքնուրույն սկսում են իրենց կոնտեքստները և գրանցում են այնտեղ Singleton բիներ, ապա ձեր հիմնական հավելվածում և այդ գրադարանում կարող է լինել նույն դասի մեկ օրինակ, որը գրանցված է որպես Singleton յուրաքանչյուր կոնտեքստում:

Հասկանալի է, որ մի քանի օրինակների ստեղծումը այն դասի, որը նախատեսված է որպես Singleton, հաճախ ցույց է տալիս հնարավոր խնդիր՝ ճարտարապետությունում կամ սխալ օգտագործման մեջ: Ընդհանուր առմամբ, եթե անհրաժեշտ է ավելի քան մեկ օրինակ, ապա singleton scope-ը չի համապատասխանում: