Junior — Middle
Vai Springā ir iespējams īstenot komponentu, kas vienlaikus darbojas kā singlon un kā prototips, un kā to izdarīt?
sobes.tech AI
Atbilde no AI
Spring pēc noklusējuma, bini ir vai nu singletoni, vai prototipi, bet nav iespējams vienlaikus deklarēt binu kā abus.
Tomēr ir iespējams realizēt singleton binu, kas iekšēji izveido jaunas prototipu eksemplārus pēc pieprasījuma.
Kā to izdarīt:
- Definēt singleton binu (pēc noklusējuma).
- Definēt prototipu binu.
- Injicēt singleton binā
ObjectProvidervaiApplicationContext, lai iegūtu jaunas prototipu instances pēc vajadzības.
Piemērs ar 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("Prototipa instances: " + this);
}
}
Šādā veidā singleton beans var izveidot un izmantot jaunas prototipu instances katru reizi, kad tas ir nepieciešams.