Back to questions
Junior — Middle
64
Можно ли использовать прототипные бины внутри других бинов в рамках Spring?
Companies where asked
МеталлИнвестБанк
Answer from AI
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("Выполнение прототипного бина");
}
}
Таким образом, можно использовать прототипные бины внутри других бинов, но для корректного получения новых экземпляров нужно применять специальные механизмы.