Junior — Middle
Ar įmanoma Spring'e įgyvendinti komponentą, kuris vienu metu veiktų kaip singleton'as ir kaip prototipas, ir kaip tai padaryti?
sobes.tech AI
Atsakymas iš AI
Spring'e pagal nutylėjimą, bean'ai yra singleton arba prototipai, tačiau negalima vienu metu deklaruoti bean kaip abu.
Tačiau įmanoma įgyvendinti singleton bean, kuris viduje kuria naujus prototipų egzempliorius pagal poreikį.
Kaip tai padaryti:
- Apibrėžti singleton bean (numatytasis).
- Apibrėžti prototip bean.
- Injektuoti į singleton bean
ObjectProviderarbaApplicationContext, kad gautumėte naujus prototipų egzempliorius pagal poreikį.
Pavyzdys su 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("Prototipo egzempliorius: " + this);
}
}
Šiuo būdu, singleton bean gali kurti ir naudoti naujus prototipų egzempliorius kiekvieno kvietimo metu.