Ответ
Если Spring не создает бин для класса с @Component, это указывает на проблему в конфигурации контекста приложения. Основные причины:
-
Отсутствует или некорректно настроено сканирование компонентов (
@ComponentScan). Spring должен знать, в каких пакетах искать аннотированные классы.@Configuration @ComponentScan(basePackages = "com.example.myapp") public class AppConfig {}- Класс с
@Componentдолжен находиться в пакетеcom.example.myappили его подпакетах.
- Класс с
-
Контекст Spring не инициализирован должным образом. Например, в веб-приложении может отсутствовать
DispatcherServletили инициализаторAbstractAnnotationConfigDispatcherServletInitializer. В standalone-приложении нужно явно создатьAnnotationConfigApplicationContext.ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); -
Класс не управляется Spring IoC-контейнером. Создание экземпляра через оператор
newобходит механизм Dependency Injection. Для получения бина нужно использоватьcontext.getBean(...)или инжектировать зависимость через@Autowired. -
Отсутствуют необходимые зависимости в classpath. Убедитесь, что в
pom.xml(Maven) илиbuild.gradleприсутствует зависимостьspring-context. -
Фильтрация при сканировании. В
@ComponentScanмогут быть указаны фильтры (excludeFilters), которые случайно исключают ваш класс.
Диагностика: При запуске приложения проверьте логи Spring. Сообщения типа "Defining beans..." и "Registered bean definition for ..." подтверждают, что сканирование работает и бин обнаружен.