Встречается на собеседованиях • сегодня

Что такое циклическая зависимость в Spring

Циклическая зависимость (circular dependency) возникает, когда два или более бина зависят друг от друга напрямую или через цепочку зависимостей. Например, BeanA требует BeanB, а BeanB требует BeanA.

Spring по умолчанию может разрешать циклические зависимости через конструктор-инъекцию, но это считается плохой практикой. Для инъекции через поля или сеттеры Spring использует промежуточные прокси-объекты.

Пример циклической зависимости:

java
@Service
public class ServiceA {
    @Autowired
    private ServiceB serviceB;
}

@Service
public class ServiceB {
    @Autowired 
    private ServiceA serviceA;
}

Способы решения:

  1. Рефакторинг - вынести общую логику в третий компонент
  2. Использовать @Lazy для отложенной инициализации
  3. Применять сеттер-инъекцию вместо конструкторной
  4. Использовать ApplicationContextAware для ручного получения бинов

Лучшая практика - избегать циклических зависимостей через правильное проектирование архитектуры.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы