Ответ
Да, контроллер Spring может отсутствовать в ApplicationContext, если он не был корректно зарегистрирован как Spring bean. Это распространённая проблема конфигурации.
Основные причины:
- Отсутствие стереотипной аннотации: Класс не помечен аннотацией
@Controller,@RestControllerили@Component. - Вне области сканирования компонентов: Пакет с контроллером не указан в
@ComponentScanили не находится в пакете корневого класса приложения. - Неправильная конфигурация в тестах: Использование
@SpringBootTestвместо@WebMvcTestдля тестирования конкретного контроллера или отсутствие моков необходимых бинов.
Пример проблемного контроллера:
// Без аннотации @RestController этот класс не будет управляться Spring.
// Он не станет частью контекста, и его эндпоинты не будут зарегистрированы.
public class MissingAnnotationController {
@GetMapping("/home") // Эта аннотация ничего не делает без @RestController
public String home() { return "home"; }
}
Как проверить:
// В коде приложения или теста
String[] beanNames = applicationContext.getBeanDefinitionNames();
// Искать имя своего контроллера среди beanNames
// Или попробовать получить бин:
// MyController controller = applicationContext.getBean(MyController.class);