Junior — Middle
Կարո՞ղ է Spring-ում իրականացնել կոմպոնենտ, որը միաժամանակ կվերաբերվի ինչպես սինգլտոնին, այնպես էլ պրոտոտիպին, և ինչպես դա անել:
sobes.tech AI
Պատասխան AI-ից
Spring- ում, ըստ նախնական կարգավորումների, բիները կարող են լինել սինգլտոններ կամ պրոտոտիպներ, բայց միաժամանակ չի կարելի հայտարարել բին և որպես սինգլտոն, և որպես պրոտոտիպ։
Այնուամենայնիվ, հնարավոր է իրականացնել սինգլտոն բին, որը ներսից ստեղծում է նոր օրինակներ պրոտոտիպի՝ ըստ պահանջի։
Ինչպես անել.
- Հստակեցնել սինգլտոն բին (նախնական)
- Հստակեցնել պրոտոտիպ բին
- Սինգլտոն բին ներմուծել
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);
}
}
Այսպիսով, սինգլտոն բին կարող է յուրաքանչյուր կանչում ստեղծել և օգտագործել նոր պրոտոտիպ օրինակներ։