Как Spring разрешает циклическую зависимость между двумя одноэлементными компонентами с помощью внедрения поля и почему та же самая циклическая зависимость терпит неудачу при запуске с внедрением конструктора?
При внедрении поля/установщика Spring предоставляет раннюю, не полностью инициализированную ссылку на первый компонент (через трехуровневый кеш), чтобы можно было создать второй компонент, а затем завершает заполнение свойств первого компонента. Внедрение в конструктор требует заранее полностью сконструированной зависимости — аргумент конструктора не может содержать раннюю ссылку — поэтому он быстро терпит неудачу с BeanCurrentlyInCreationException, который рассматривается как функция, выявляющая реальную проблему проектирования.
Пример
// Spring "singleton": enforced by the container, not the class@ServicepublicclassConfigManager { // a completely ordinary, public-constructor class// ...
}
Итог
При внедрении поля/установщика Spring предоставляет раннюю, не полностью инициализированную ссылку на первый компонент (через трехуровневый кеш), чтобы можно было создать второй компонент, а затем завершает заполнение свойств первого компонента.
Как Spring разрешает циклическую зависимость между двумя одноэлемен… · Sobeso