Back to questions
Junior — Middle
62
Возможно ли реализовать в Spring компонент, который одновременно будет вести себя как синглтон и как прототип, и как это сделать?
Companies where asked
eRaga Infosystem
Answer from AI
sobes.tech 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);
}
}
Таким образом, синглтон-бин может создавать и использовать новые экземпляры прототипа при каждом вызове.