Spring IoC контейнер: зависимости, автопривязка взаимодействующих компонентов
Контейнер Spring может автоматически связывать отношения между взаимодействующими компонентами. Вы можете позволить Spring автоматически разрешать коллабораторов (другие компоненты) для вашего компонента, проверяя содержимое ApplicationContext. Автопривязка (autowiring) имеет следующие преимущества:
- Автопривязка может значительно уменьшить необходимость указывать свойства или аргументы конструктора. (Другие механизмы, такие как шаблон bean-компонента, также ценны в этом отношении.)
- Автопривязка может обновлять конфигурацию по мере развития ваших объектов. Например, если вам нужно добавить зависимость к классу, эта зависимость может быть удовлетворена автоматически без необходимости изменять конфигурацию. Таким образом, автопривязка может быть особенно полезным во время разработки, не отменяя возможность переключения на явное подключение, когда кодовая база становится более стабильной.
При использовании метаданных конфигурации на основе XML вы можете указать режим автопривязки для определения компонента с атрибутом autowire элемента <bean/>. Функциональность автопривязки имеет четыре режима. Вы указываете автопривязку для каждого отдельного bean-компонента и, таким образом, можете выбирать, какие из них использовать. В следующей таблице описаны четыре режима автопривязки:
Режимы автопривязки
Режим | Описание |
---|---|
no |
(По умолчанию) Автопривязка отсутствует. Ссылки на bean-компоненты должны быть определены элементами ref. Изменение настроек по умолчанию не рекомендуется для более крупных развертываний, поскольку явное указание соавторов дает больший контроль и ясность. В некоторой степени это документирует структуру системы. |
byName |
Автопривязка по названию свойства. Spring ищет bean-компонент с тем же именем, что и у свойства, которое необходимо подключить автоматически. Например, если для определения компонента установлено значение autowire по имени, и оно содержит главное свойство (то есть имеет метод setMaster(..)), Spring ищет определение компонента с именем master и использует его для установки свойства. |
byType |
Позволяет автоматически привязать свойство, если в контейнере существует ровно один компонент типа свойства. Если существует более одного, генерируется фатальное исключение, которое указывает, что вы не можете использовать автопривязку byType для этого компонента. Если соответствующих бинов нет, ничего не происходит (свойство не установлено). |
constructor |
Аналогичен byType, но применяется к аргументам конструктора. Если в контейнере нет точно одного компонента с аргументом конструктора, возникает фатальная ошибка. |
С режимом автопривязки ByType или constructor вы можете связывать массивы и типизированные коллекции. В таких случаях все кандидаты автопривязки в контейнере, которые соответствуют ожидаемому типу, предоставляются для удовлетворения зависимости. Вы можете автопривязывать строго типизированные экземпляры Map, если ожидаемый тип ключа - String. Значения экземпляра Map с автопривязкой состоят из всех экземпляров бинов, соответствующих ожидаемому типу, а ключи экземпляра Map содержат соответствующие имена бинов.
Читайте также:
- Spring IoC контейнер: зависимости, лениво инициализированные бины
- Spring IoC контейнер: зависимости и конфигурация в деталях, ярлык XML с пространством имен p
- Spring IoC контейнер: зависимости и конфигурация в деталях, прямые значения
Комментарии
Отправить комментарий