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

Как решить циклическую зависимость в Spring

Циклическая зависимость возникает, когда два бина зависят друг от друга (A → B → A). Spring предлагает несколько способов решения:

  1. Использование @Lazy - откладывает инициализацию одного из бинов до момента его реального использования:
java
@Service
public class ServiceA {
    @Lazy
    @Autowired
    private ServiceB serviceB;
}
  1. Setter/Field инъекция вместо конструкторной - Spring сначала создаст бины, а потом внедрит зависимости:
java
@Service
public class ServiceA {
    @Autowired
    private ServiceB serviceB;
}
  1. @PostConstruct - инициализация зависимостей после создания бинов:
java
@Service
public class ServiceA {
    private ServiceB serviceB;
    
    @Autowired
    public void setServiceB(ServiceB serviceB) {
        this.serviceB = serviceB;
    }
}

Лучший подход - пересмотреть архитектуру и устранить циклическую зависимость через рефакторинг (например, вынести общую логику в третий компонент).

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

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

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

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