Ответ
Во время создания контекста приложения (на этапе инъекции зависимостей) Spring выбросит исключение NoSuchBeanDefinitionException, что приведет к сбою инициализации контекста и остановке приложения.
Типичные причины:
- Отсутствует аннотация, определяющая bean (
@Component,@Service,@Repository,@Controller,@Configuration). - Компонент находится вне областей сканирования, указанных в
@ComponentScan. - Bean объявлен только в XML-конфигурации, которая не подключена.
- Зависимость запрашивается по имени (
@Qualifier) или типу, который не соответствует ни одному bean.
Пример, вызывающий ошибку:
@Service
public class OrderService {
@Autowired
private PaymentProcessor processor; // NoSuchBeanDefinitionException, если PaymentProcessor не является bean
}
Способы решения/предотвращения:
- Проверить сканирование пакетов: Убедиться, что класс с зависимостью находится в пакете, указанном в
@ComponentScan. - Явное объявление бина: Создать bean через
@Beanв классе с аннотацией@Configuration. - Сделать зависимость опциональной: Использовать
@Autowired(required = false). Тогда поле останетсяnull, если bean не найден. - Использовать
Optional:@Autowired private Optional<PaymentProcessor> processor; // Будет пустым Optional, если bean отсутствует