Sobes.tech
Junior — Middle

Is het mogelijk om in Spring een component te implementeren die zowel als singleton als prototype fungeert, en hoe doe je dat?

sobes.tech AI

Antwoord van AI

In Spring zijn beans standaard singleton of prototype, maar je kunt niet tegelijkertijd een bean als beide declareren.

Het is echter mogelijk om een singleton bean te implementeren die op aanvraag nieuwe prototype-instanties creëert.

Hoe doe je dat:

  1. Definieer een singleton bean (standaard).
  2. Definieer een prototype bean.
  3. Injecteer in de singleton een ObjectProvider of ApplicationContext om nieuwe prototype-instanties te verkrijgen wanneer nodig.

Voorbeeld met 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("Prototype instantie: " + this);
    }
}

Op deze manier kan de singleton bean bij elke oproep nieuwe prototype-instanties maken en gebruiken.