Sobes.tech
Junior — Middle
94

Leg uit wat een cyclische afhankelijkheid is in de context van Spring en hoe je deze kunt vermijden

Bedrijven waar gevraagd werd
Surf
AstonAston

Antwoord van AI

sobes.tech AI

Циклическая зависимость в Spring возникает, когда два или более бина зависят друг от друга напрямую или косвенно, создавая замкнутый круг. Например, бин A зависит от бина B, а бин B — от бина A.

Это приводит к ошибкам при создании контекста Spring, так как контейнер не может определить порядок инициализации.

Как избежать циклических зависимостей:

  • Пересмотреть дизайн и разделить ответственность между классами.
  • Использовать внедрение зависимостей через сеттеры (@Autowired на сеттере), чтобы Spring мог создать бины и потом установить зависимости.
  • Применять интерфейсы и абстракции для разрыва циклов.
  • Использовать аннотацию @Lazy для отложенной инициализации одного из бинов.

Пример с @Lazy:

@Component
public class A {
    private final B b;

    public A(@Lazy B b) {
        this.b = b;
    }
}

@Component
public class B {
    private final A a;

    public B(A a) {
        this.a = a;
    }
}

Здесь @Lazy позволяет Spring создать бин A без немедленного создания B, разрывая цикл.