Как разрешается зависимость
Во время сборки для каждой зависимости из entries строится полный граф вложенных зависимостей.
Построение графа происходит только на этапе компиляции — скомпилированный контейнер уже содержит готовую структуру, без рефлексии в рантайме.
Autowiring в конструктор
Механизм автоматического анализа аргументов конструктора для определения требуемых зависимостей.
На основе аргументов конструктора формируются имена зависимостей. Если для аргумента
найдено локальное имя в params или alias, оно используется вместо глобального. Если аргумент имеет
значения по умолчанию, необязательные аргументы без явного значения пропускаются.
Остальные аргументы рекурсивно разрешаются по тем же правилам — через params, alias
или снова через autowiring.
Если аргумент указывает на несуществующий класс или создать экземпляр невозможно (абстрактный класс, интерфейс без алиаса), будет выброшено исключение с детальным описанием проблемы.
Приоритет разрешаемых зависимостей
Когда в конфигурации указаны разные значения для одного и того же имени, система применяет следующий порядок приоритета (от высшего к низшему):
- Локальное имя из
params - Глобальное имя из
params - Локальное имя из
alias - Глобальное имя из
alias - Значение по умолчанию
- Autowiring в конструктор
Рекомендация: используйте глобальные имена для большинства случаев. Они делают конфигурацию предсказуемой — один алиас или параметр применяется ко всем потребителям. Локальные имена доступны для точечного переопределения, но их стоит применять осознанно, когда глобальная настройка не подходит конкретному потребителю.