Sobes.tech
Назад к вопросам
Junior — Middle
63

Можно ли использовать прототипные бины внутри других бинов в рамках Spring?

Компании, где спрашивали
МеталлИнвестБанк

Ответ от нейросети

sobes.tech AI

В Spring можно использовать прототипные (prototype) бины внутри синглтон-бинов, но при этом важно учитывать, что по умолчанию прототипный бин создаётся только один раз при создании синглтон-бина, и далее используется тот же экземпляр.

Чтобы каждый раз получать новый экземпляр прототипного бина внутри синглтона, можно использовать:

  • ObjectFactory или Provider — внедрять фабрику, которая будет создавать новый бин по запросу.
  • Метод @Lookup — аннотировать метод, который будет возвращать новый экземпляр прототипного бина.

Пример с @Lookup:

@Component
@Scope("singleton")
public class SingletonBean {

    @Lookup
    public PrototypeBean getPrototypeBean() {
        // Spring подменит реализацию, возвращая новый PrototypeBean
        return null;
    }

    public void usePrototype() {
        PrototypeBean prototype = getPrototypeBean();
        prototype.doSomething();
    }
}

@Component
@Scope("prototype")
public class PrototypeBean {
    public void doSomething() {
        System.out.println("Выполнение прототипного бина");
    }
}

Таким образом, можно использовать прототипные бины внутри других бинов, но для корректного получения новых экземпляров нужно применять специальные механизмы.