❓ Как Spring разрешает циклические зависимости между бинами?
Для синглтонов с внедрением через поля или сеттеры через кеш ранних ссылок (трёхуровневый кеш). Spring создаёт «сырой» экземпляр бина, кладёт раннюю ссылку на него до завершения инициализации, и второй бин в цикле получает эту ссылку, не дожидаясь полной готовности первого.
А вот при внедрении через конструктор цикл разрешить нельзя: чтобы создать бин A, нужен готовый B, а чтобы создать B — готовый A. Результат — BeanCurrentlyInCreationException.
Лучшее решение — устранить цикл, так как это обычно запах архитектуры. Как костыль — @Lazy на одной из зависимостей.
🐸 Библиотека собеса по Java
#spring
Post #1378
1.27K
- ❤ 3
- 👍 3
- 🔥 1