Sobes.tech
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 фактически теряет свою смысловую область видимости.