Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Как разрешается зависимость

Во время сборки для каждой зависимости из entries строится полный граф вложенных зависимостей.

Построение графа происходит только на этапе компиляции — скомпилированный контейнер уже содержит готовую структуру, без рефлексии в рантайме.

Autowiring в конструктор

Механизм автоматического анализа аргументов конструктора для определения требуемых зависимостей.

На основе аргументов конструктора формируются имена зависимостей. Если для аргумента найдено локальное имя в params или alias, оно используется вместо глобального. Если аргумент имеет значения по умолчанию, необязательные аргументы без явного значения пропускаются.

Остальные аргументы рекурсивно разрешаются по тем же правилам — через params, alias или снова через autowiring.

Если аргумент указывает на несуществующий класс или создать экземпляр невозможно (абстрактный класс, интерфейс без алиаса), будет выброшено исключение с детальным описанием проблемы.

Приоритет разрешаемых зависимостей

Когда в конфигурации указаны разные значения для одного и того же имени, система применяет следующий порядок приоритета (от высшего к низшему):

  1. Локальное имя из params
  2. Глобальное имя из params
  3. Локальное имя из alias
  4. Глобальное имя из alias
  5. Значение по умолчанию
  6. Autowiring в конструктор

Рекомендация: используйте глобальные имена для большинства случаев. Они делают конфигурацию предсказуемой — один алиас или параметр применяется ко всем потребителям. Локальные имена доступны для точечного переопределения, но их стоит применять осознанно, когда глобальная настройка не подходит конкретному потребителю.