Что такое Spring и как он работает
Что проверяют
Тестировщик на Java-проекте бины не пишет, но должен понимать, из чего собрано приложение под тестом: откуда берутся зависимости, почему поведение меняется от профиля, где точка входа для интеграционного теста. Вопрос отделяет тех, кто умеет только дёргать API снаружи, от тех, кто может прочитать код и поднять стенд.
Как отвечать
Коротко: Spring это контейнер, который сам создаёт объекты (бины) и подставляет им зависимости, вместо того чтобы каждый класс звал new. Это инверсия управления: конфигурацию читает контейнер, класс получает готовые зависимости обычно через конструктор.
Дальше по слоям:
- Контейнер и DI: бин объявляется аннотацией или Java-конфигурацией, по умолчанию живёт в scope singleton, то есть один экземпляр на контекст.
- AOP: сквозные вещи (транзакции, логирование, безопасность) навешиваются прокси вокруг бина, а не вписываются в тело метода.
- Spring MVC и WebFlux: маршрутизация HTTP-запросов на методы контроллеров.
- Spring Boot: автоконфигурация по содержимому classpath плюс встроенный сервер и настройки в properties или yaml.
Для QA важнее всего то, что контейнер даёт тестам. Аннотация поднятия всего контекста запускает приложение целиком, срезы поднимают только веб-слой, MockMvc бьёт в контроллер без реальной сети, подмена бина заглушкой изолирует внешнюю систему, профили и properties переключают стенд на тестовую базу, Testcontainers поднимает настоящую базу в контейнере.
Где спотыкаются
Путают IoC и DI и выдают их за синонимы. Инверсия управления это принцип, внедрение зависимостей один из способов его реализации, а в Spring есть ещё и внедрение через сеттеры и поля.
Называют тест с поднятием всего контекста модульным. Это интеграционный тест: он стартует контекст, читает конфигурацию и потому идёт секундами, а в пайплайне таких тестов должно быть заметно меньше, чем обычных.
Не помнят, что бин по умолчанию один на всё приложение, и хранят в его поле состояние текущего запроса или теста. При параллельном прогоне такие тесты начинают влиять друг на друга, и падение выглядит плавающим.