Sobes.tech
Middle

Springде эки Singleton түзүү мүмкүнбү?

sobes.tech AI

AIден жооп

Ооба, мүмкүнчүлүк бар, бирок бул Singleton (бир гана үлгү) паттернин негизги максатынан каршы келет. Springде бул төмөнкү механизмдер аркылуу жеткиликтүү:

  1. Төрт Spring контексттери: Эгерде сизде эки башка Spring контексттери болсо (мисалы, модулдарга бөлүнгөн монолиттик колдонмо, ар бири өзүнүн контекстине ээ же бөлүштүрүлгөн системада, анда ар бир кызмат өзүнүн контекстине ээ), ар бир контекст өзүнүн Singleton-биндин үлгүсүн камтышы мүмкүн.

  2. Scope prototype: 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. Китепканалар менен байланыш, алардын өзүнүн контексттери бар: Эгер сиздин колдонмоңуз өзүнүн Spring контексттерин баштай турган жана ошол жерде Singleton-биндерди каттаган китепканаларды колдонсо, анда негизги колдонмоңузда жана ошол китепканада бир эле класстин үлгүсү болушу мүмкүн, ар бир контекстте Singleton катары катталган.

Маанилүү, Singleton катары ойлонулган класстин бир нече үлгүсүн түзүү көбүнесе архитектурада потенциалдуу көйгөйгө же паттерндин туура эмес колдонулушуна ишара кылат. Жалпысынан, эгер бир нече үлгү талап кылынса, singleton scope ылайыктуу эмес.