Junior — Middle
Este posibil să implementăm în Spring un component care să se comporte atât ca un singleton, cât și ca un prototip, și cum se face acest lucru?
sobes.tech AI
Răspuns de la AI
В Spring по умолчанию бины бывают синглтонами или прототипами, но нельзя одновременно объявить бин и синглтоном, и прототипом.
Однако можно реализовать бин синглтон, который внутри себя создает новые экземпляры прототипа по запросу.
Как это сделать:
- Определить бин синглтон (по умолчанию).
- Определить бин прототип.
- В синглтон-бине внедрить
ObjectProviderилиApplicationContextдля получения новых экземпляров прототипа по требованию.
Пример с 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 instance: " + this);
}
}
Таким образом, синглтон-бин может создавать и использовать новые экземпляры прототипа при каждом вызове.