Spring IoC контейнер: зависимости и конфигурация в деталях, элемент idref

Элемент idref - это просто защищенный от ошибок способ передачи идентификатора (строковое значение - не ссылка) другого компонента в контейнере в элемент <constructor-arg/> или <property/>. В следующем примере показано, как его использовать:

<bean id="theTargetBean" class="..."/>

<bean id="theClientBean" class="...">
    <property name="targetName">
        <idref bean="theTargetBean"/>
    </property>
</bean>

Предыдущий фрагмент определения компонента в точности соответствует (во время выполнения) следующему фрагменту:

<bean id="theTargetBean" class="..." />

<bean id="client" class="...">
    <property name="targetName" value="theTargetBean"/>
</bean>

Первая форма предпочтительнее второй, потому что использование тега idref позволяет контейнеру проверять во время развертывания, что указанный именованный компонент фактически существует. Во втором варианте не выполняется проверка значения, которое передается свойству targetName клиентского компонента. Опечатки обнаруживаются (с наиболее вероятными фатальными результатами) только тогда, когда клиентский бин действительно создается. Если клиентский компонент является компонентом-прототипом, эта опечатка и полученное исключение могут быть обнаружены только спустя долгое время после развертывания контейнера.

Локальный атрибут элемента idref больше не поддерживается в XSD bean-компонентов 4.0, поскольку он больше не предоставляет значения по сравнению с обычной ссылкой bean-компонента. Измените существующие локальные ссылки idref на idref bean при обновлении до схемы 4.0.

Распространенное место (по крайней мере в версиях, предшествующих Spring 2.0), где элемент <idref/> возвращает значение, - это конфигурация перехватчиков AOP в определении компонента ProxyFactoryBean. Использование элементов <idref/> при указании имен перехватчиков предотвращает неправильное написание идентификатора перехватчика.


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


Комментарии

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

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

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

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