Использование 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,

Другие вопросы по тегам