Sobes.tech
Back to questions
Junior — Middle
72

Какими методами можно получить новый экземпляр компонента, настроенного по шаблону prototype, в контексте Spring или аналогичных фреймворков?

Companies where asked
Ви6 Сервисес

Answer from AI

sobes.tech AI

В Spring для получения нового экземпляра компонента с шаблоном prototype можно использовать несколько подходов:

  1. Аннотация @Scope("prototype") — при объявлении бина с таким скоупом Spring будет создавать новый объект при каждом запросе из контекста.

  2. ApplicationContext.getBean() — каждый вызов этого метода для prototype-бина возвращает новый экземпляр.

  3. ObjectFactory или Provider — внедрить в singleton-компонент фабрику, которая при вызове будет возвращать новый prototype-объект:

@Component
@Scope("prototype")
public class MyPrototypeBean { }

@Component
public class SingletonBean {
    private final ObjectFactory<MyPrototypeBean> prototypeFactory;

    public SingletonBean(ObjectFactory<MyPrototypeBean> prototypeFactory) {
        this.prototypeFactory = prototypeFactory;
    }

    public void usePrototype() {
        MyPrototypeBean prototype = prototypeFactory.getObject();
        // использовать prototype
    }
}
  1. Lookup method injection — аннотировать метод в singleton-бине как @Lookup, чтобы Spring подменял его реализацию и возвращал новый prototype-экземпляр.

Таким образом, ключевой момент — prototype-бин создаётся заново при каждом запросе из контекста, и для доступа к нему из singleton-компонентов используют фабрики или lookup-инъекции.