Junior — Middle
Je možné v Springu implementovať komponentu, ktorá bude súčasne fungovať ako singleton aj ako prototyp, a ako to urobiť?
sobes.tech AI
Odpoveď od AI
U Springu su beani prema zadanoj postavci singletoni ili prototipi, 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.