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

Подобно ярлыку XML с пространством имен p, пространство имен c, представленное в Spring 3.1, позволяет использовать встроенные атрибуты для настройки аргументов конструктора, а не вложенные элементы constructor-arg.

В следующем примере пространство имен c: используется для выполнения тех же действий, что и из инъекций зависимости от конструктора:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="beanTwo" class="x.y.ThingTwo"/>
    <bean id="beanThree" class="x.y.ThingThree"/>

    <!-- традиционное объявление с необязательными именами аргументов -->
    <bean id="beanOne" class="x.y.ThingOne">
        <constructor-arg name="thingTwo" ref="beanTwo"/>
        <constructor-arg name="thingThree" ref="beanThree"/>
        <constructor-arg name="email" value="something@somewhere.com"/>
    </bean>

    <!-- Объявление пространства имен c с именами аргументов -->
    <bean id="beanOne" class="x.y.ThingOne" c:thingTwo-ref="beanTwo"
        c:thingThree-ref="beanThree" c:email="something@somewhere.com"/>

</beans>

Пространство имен c: использует те же соглашения, что и p: (конечный -ref для ссылок на bean-компоненты) для установки аргументов конструктора по их именам. Точно так же его необходимо объявить в файле XML, даже если он не определен в схеме XSD (он существует внутри ядра Spring).

В тех редких случаях, когда имена аргументов конструктора недоступны (обычно, если байт-код был скомпилирован без отладочной информации), вы можете использовать откат к индексам аргументов следующим образом:

<!-- Объявление индекса пространства имен c -->
<bean id="beanOne" class="x.y.ThingOne" c:_0-ref="beanTwo" c:_1-ref="beanThree"
    c:_2="something@somewhere.com"/>

Из-за грамматики XML для индексной нотации требуется наличие ведущего _, поскольку имена атрибутов XML не могут начинаться с цифры (даже если некоторые среды IDE позволяют это). Соответствующая индексная нотация также доступна для элементов <constructor-arg>, но обычно не используется, так как там обычно достаточно простого порядка объявления.

На практике механизм разрешения конструктора достаточно эффективен при сопоставлении аргументов, поэтому рекомендуется использовать обозначение имени (name) во всей конфигурации.


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


Комментарии

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

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

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

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