Главная » Spring » Смешивание   автоматического и явного связывания Spring

0

Использование механизма автоматического связывания не озна- чает, что нельзя явно связывать некоторые свойства. Вы все еще мо- жете использовать элемент <property> для описания любого свойства, как если бы не использовали автоматическое связывание.

Например, чтобы явно связать свойство instrument  компонента

kenny, даже при том, что для этого компонента определено исполь-

зование автоматического связывания по типу, можно использовать следующее определение:

<bean  id="kenny"

class="com.springinaction.springidol.Instrumentalist" autowire="byType">

<property name="song" value="Jingle Bells" />

<property  name="instrument"  ref="saxophone"  />

</bean>

Как видно из этого примера, смешивание автоматического и яв- ного связывания – отличный способ устранить неоднозначности, возникающие при автоматическом связывании по типу (byType). В конфигурации Spring может быть определено несколько компо- нентов, реализующих интерфейс Instrument. Чтобы предотвратить появление исключения, вызванного неопределенностью выбора из нескольких компонентов типа Instrument, можно явно связать свой- ство instrument, фактически исключив его из процедуры автомати- ческого связывания.

Ранее упоминалось, что можно использовать элемент <null/>, что- бы принудительно присвоить автоматически связываемому свой- ству значение null. Это особый случай смешивания автоматического и явного связывания. Например, если потребуется, чтобы свойство instrument компонента kenny получило значение null, можно исполь- зовать следующее его определение:

<bean  id="kenny"

class="com.springinaction.springidol.Instrumentalist" autowire="byType">

<property name="song" value="Jingle Bells" />

<property  name="instrument"><null/></property>

</bean>

Конечно, это всего лишь иллюстрация. Если внедрить значение null в свойство instrument, это приведет к исключению NullPointerException в вызове метода perform().

Заключительное замечание о смешанном связывании: при ис- пользовании автоматического связывания через конструктор сле- дует дать фреймворку Spring возможность связывать все аргумен- ты конструктора – нельзя использовать элементы <constructor-arg> вместе с автоматическим связыванием через конструктор.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии