Junior — Middle
Da li je moguće implementirati u Springu komponentu koja će se istovremeno ponašati kao singleton i kao prototip, i kako to učiniti?
sobes.tech АИ
Одговор од АИ
U Spring-u, podrazumevano, beani su singleton ili prototip, ali nije moguće istovremeno deklarisati bean i kao singleton i kao prototip.
Međutim, moguće je implementirati singleton bean koji interno kreira nove instance prototipa na zahtev.
Kako to uraditi:
- Definisati singleton bean (po default-u).
- Definisati prototip bean.
- Uvesti u singleton bean
ObjectProvideriliApplicationContextza dobijanje novih instanci prototipa po potrebi.
Primer sa 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("Prototip primer: " + this);
}
}
Na ovaj način, singleton bean može da kreira i koristi nove instance prototipa pri svakom pozivu.