Использование SpEL для копирования ссылок на bean не работает
Я экспериментировал с весной. Я хочу скопировать значение и ссылочные свойства для другого компонента, используя SpEL.
Рассмотрим этот боб:
<bean id="kenny" class="com.springinaction.springidol.Instrumentalist">
<property name="song" value="#{'Jingle Bells'}" />
<property name="instrument" ref="piano" />
</bean>
Я хочу скопировать его значения в другой компонент, как показано ниже:
<bean id="carl" class="com.springinaction.springidol.Instrumentalist">
<property name="song" value="#{kenny.song}" />
<property name="instrument" ref="#{kenny.instrument}" /> <-- I GET EXCEPTION OVER HERE
</bean>
Тем не менее, я получаю исключение для второго prpoperty, так как не удается скопировать интрумент Кенни. Песня скопирована правильно, без каких-либо исключений.
Я получаю это исключение:
Исключение в потоке "main" org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем 'carl', определенным в ресурсе пути к классу [Beans.xml]: не удается разрешить ссылку на bean-компонент '#{kenny.instrument}' при установке свойство бина 'инструмент'; вложенным исключением является org.springframework.beans.factory.BeanExpressionException: сбой анализа выражения; вложенное исключение: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(позиция 6): поле или свойство 'instrument' не может быть найдено в объекте типа 'com.springinaction.springidol.Instrumentalist'
Любая идея, как я могу скопировать инструмент и установить его для боба с идентификатором "Карл", пожалуйста?
1 ответ
ref
ссылка на другой бин; в вашем случае вы хотите использовать значение instrumemt
собственность kenny
боб.
Вы должны использовать
<property name="instrument" value="#{kenny.instrument}" />
Это предполагает, что есть getInstrument()
метод на Instrumentalist
,