Spring IoC контейнер: зависимости, ограничения и недостатки автопривязки

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

Рассмотрим ограничения и недостатки автовязки:

  • Явные зависимости в property и constructor-arg всегда переопределяют автопривязку. Вы не можете автоматически связывать простые свойства, такие как примитивы, строки и классы (и массивы таких простых свойств). Это ограничение является побочным.
  • Автопривязка менее точная, чем явная привязка. Хотя Spring старается избегать догадок в случае двусмысленности, которая может привести к неожиданным результатам. Отношения между объектами, управляемыми Spring, больше не документированы в явном виде.
  • Информация о привязке может быть недоступна для инструментов, которые могут генерировать документацию из контейнера Spring.
  • Несколько определений bean-компонентов в контейнере могут соответствовать типу, указанному в методе setter или аргументе конструктора для автоматической привязки. Для массивов, коллекций или экземпляров Map это не обязательно является проблемой. Однако для зависимостей, которые ожидают одно значение, эта неопределенность не разрешается произвольно. Если нет уникального определения бина, выдается исключение.

В последнем сценарии у вас есть несколько вариантов:

  • Откажитесь от автопривязки в пользу явной привязки.
  • Избегайте автопривязки для определения bean-компонента, установив для его autowire-candidate атрибутов значение false.
  • Сделайте одно определение компонента в качестве основного кандидата, задав для основного (primary) атрибута его элемента <bean/> значение true.
  • Внедрите более детальный элемент управления, доступный в конфигурации на основе аннотаций.

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


Комментарии

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

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

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

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