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

«В Spring: если несколько классов инжектят один и тот же бин, будет ли создан один его экземпляр?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, по умолчанию будет создан один экземпляр (singleton scope). Все зависимости получат ссылку на один и тот же объект бина.

Почему? Область видимости (scope) бина по умолчанию в Spring — singleton. Контейнер создает единственный экземпляр на все приложение и возвращает его при каждом запросе или инъекции.

Пример:

@Service // По умолчанию scope="singleton"
public class MyService {
    // Логика сервиса
}

@RestController
public class ControllerA {
    @Autowired
    private MyService service; // Получает ссылку на singleton-экземпляр MyService
}

@RestController
public class ControllerB {
    @Autowired
    private MyService service; // Получает ссылку на ТОТ ЖЕ singleton-экземпляр
}

Исключение: Если для бина явно задана другая область видимости (например, @Scope("prototype")), то для каждой инъекции будет создаваться новый экземпляр.