Sobes.tech
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:

  1. Definiáljunk egy singleton bean-t (alapértelmezett).
  2. Definiáljunk egy prototípus bean-t.
  3. Injektáljunk a singleton bean-be egy ObjectProvider-t vagy ApplicationContext-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.