Senior
25
Что будет, если в prototype внедрить singleton?
Компании, где спрашивали
Uzum
Ответ от нейросети
sobes.tech AI
Если в Spring-контейнере внедрить бин с областью видимости prototype в singleton, то по умолчанию в singleton будет внедрён один экземпляр prototype, созданный при инициализации singleton.
Это значит, что несмотря на то, что prototype должен создавать новый объект при каждом запросе, в singleton будет использоваться один и тот же экземпляр.
Чтобы получить настоящий prototype внутри singleton, используют паттерны:
- Внедрение
ObjectFactory<PrototypeBean>илиProvider<PrototypeBean>, чтобы получать новый экземпляр по запросу. - Использование аннотации
@Lookupдля динамического получения prototype.
Пример с ObjectFactory:
@Component
@Scope("singleton")
public class SingletonBean {
@Autowired
private ObjectFactory<PrototypeBean> prototypeBeanFactory;
public void doSomething() {
PrototypeBean prototype = prototypeBeanFactory.getObject();
prototype.action();
}
}
@Component
@Scope("prototype")
public class PrototypeBean {
public void action() {
System.out.println("Prototype action");
}
}
Без таких приёмов prototype в singleton фактически теряет свою смысловую область видимости.