0

Я экспериментировал с Spring. Я хочу скопировать свойства компонента и ссылочные свойства для другого компонента, используя SpEL.Использование 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 как это не удастся скопировать интонацию Кенни. Песня правильно скопирована без каких-либо исключений бросают

Я получаю это исключение:

Исключения в потоке «основной» org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем «Карлу ', определенный в ресурсе пути класса [Beans.xml]: Невозможно разрешить ссылку на bean' # {kenny.instrument} ' при настройке bean property' instrument '; вложенное исключение: org.springframework.beans.factory.BeanExpressionException: выражение не удалось выполнить синтаксический анализ; вложенное исключение составляет org.springframework.expression.spel.SpelEvaluationException: EL1008E: (поз 6): Поле или свойство 'инструмент' не может быть найден на объект типа 'com.springinaction.springidol.Instrumentalist'

Любая идея, как я могу скопировать инструмент и установить его для bean с идентификатором «carl», пожалуйста?

ответ

3

A ref - ссылка на другую фасоль; в вашем случае вы хотите использовать значение свойства instrumemt для компонента kenny.

Вы должны использовать

<property name="instrument" value="#{kenny.instrument}" /> 

Это предполагает, что есть getInstrument() метод на Instrumentalist.

+0

Спасибо, что работает. Единственная причина, по которой я добавил ссылку, потому что инструмент Кенни имеет в виду также фасоль. – Goaler444

+1

Не имеет значения, что источником свойства Кенни был боб; в точке разрешения эта связь потеряна - вы можете использовать 'ref =" фортепиано "или' value = "# {kenny.instrument}'. –