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 содержат соответствующие имена бинов.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки