Циклическая зависимость двух сервисов при конструкторной инъекции
После рефакторинга приложение перестало стартовать: OrderService внедряет BillingService через конструктор, а BillingService — OrderService. Контейнер сообщает о циклической зависимости бинов.
Как правильно к этому отнестись?
- Достаточно перейти на инъекцию в поле: контекст поднимется, приложение заработает, и вопрос можно закрыть
- Цикл безопасен, контейнер разрешает его сам — надо лишь включить соответствующую настройку и больше к этому не возвращаться
- Это симптом неверного разделения ответственности: общую логику стоит вынести в третий компонент или развязать сервисы событием
- Убрать цикл можно только объединением обоих сервисов в один класс — других способов у Spring нет
