Junior — Middle
Lehetséges-e Springben olyan komponens megvalósítása, amely egyszerre működik singletonként és prototípusként, és hogyan lehet ezt megtenni?
sobes.tech MI
Válasz az MI-től
A Springben alapértelmezés szerint a bean-ek singleton vagy prototype típusúak lehetnek, de nem lehet egyszerre mindkettő.
Azonban megvalósítható egy singleton bean, amely kérésre új példányokat hoz létre a prototípusból.
Hogyan csináljuk:
- Definiáljunk egy singleton bean-t (alapértelmezett).
- Definiáljunk egy prototípus bean-t.
- Injektáljunk a singleton bean-be egy
ObjectProvider-t vagyApplicationContext-et, hogy szükség szerint új példányokat kérhessünk a prototípusból.
Példa ObjectProvider-rel:
@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("Prototipus példány: " + this);
}
}
Így a singleton bean minden hívásnál új prototípus példányokat hozhat létre és használhat.