Spring: бин с @Component инжектируется в два места — сколько экземпляров создаётся? Как сделать новый экземпляр на каждую инжекцию?

Если бин помечен аннотацией @Component и инжектируется в два места, по умолчанию Spring создаст один синглтон-экземпляр этого бина и будет использовать его везде.

Короткий ответ

Что ответить на собеседовании

Если бин помечен аннотацией @Component и инжектируется в два места, по умолчанию Spring создаст один синглтон-экземпляр этого бина и будет использовать его везде.

Подробный разбор

Ответ с пояснениями

Если бин помечен аннотацией @Component и инжектируется в два места, по умолчанию Spring создаст один синглтон-экземпляр этого бина и будет использовать его везде.

Чтобы создавать новый экземпляр бина при каждой инъекции, нужно изменить область видимости (scope) бина на prototype:

@Component
@Scope("prototype")
public class MyBean {
    // ...
}

В этом случае при каждой инъекции Spring будет создавать новый экземпляр бина.

Важно: при использовании prototype бинов в синглтон-бинах нужно учитывать, что Spring не будет автоматически создавать новые экземпляры при каждом вызове, а только при создании самого синглтон-бина. Для динамического получения новых экземпляров можно использовать ObjectFactory или Provider.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее