Sobes.tech
Junior — Middle

Կարո՞ղ է Spring-ում իրականացնել կոմպոնենտ, որը միաժամանակ կվերաբերվի ինչպես սինգլտոնին, այնպես էլ պրոտոտիպին, և ինչպես դա անել:

sobes.tech AI

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

Spring- ում, ըստ նախնական կարգավորումների, բիները կարող են լինել սինգլտոններ կամ պրոտոտիպներ, բայց միաժամանակ չի կարելի հայտարարել բին և որպես սինգլտոն, և որպես պրոտոտիպ։

Այնուամենայնիվ, հնարավոր է իրականացնել սինգլտոն բին, որը ներսից ստեղծում է նոր օրինակներ պրոտոտիպի՝ ըստ պահանջի։

Ինչպես անել.

  1. Հստակեցնել սինգլտոն բին (նախնական)
  2. Հստակեցնել պրոտոտիպ բին
  3. Սինգլտոն բին ներմուծել ObjectProvider կամ ApplicationContext՝ նոր օրինակներ ստանալու համար՝ ըստ պահանջի։

Օրինակ ObjectProvider-ով՝

@Component
@Scope("singleton")
public class SingletonBean {

    private final ObjectProvider<PrototypeBean> prototypeBeanProvider;

    public SingletonBean(ObjectProvider<PrototypeBean> prototypeBeanProvider) {
        this.prototypeBeanProvider = prototypeBeanProvider;
    }

    public void usePrototype() {
        PrototypeBean prototype = prototypeBeanProvider.getObject();
        prototype.doSomething();
    }
}

@Component
@Scope("prototype")
public class PrototypeBean {
    public void doSomething() {
        System.out.println("Պրոտոտիպ օրինակ: " + this);
    }
}

Այսպիսով, սինգլտոն բին կարող է յուրաքանչյուր կանչում ստեղծել և օգտագործել նոր պրոտոտիպ օրինակներ։