0

我一直在尝试使用 Spring。我希望通过使用 SpEL 为另一个 bean 复制一个 bean 的值和引用属性。

考虑这个bean:

<bean id="kenny" class="com.springinaction.springidol.Instrumentalist">
    <property name="song" value="#{'Jingle Bells'}" /> 
    <property name="instrument" ref="piano" /> 
</bean>

我希望将其值复制到另一个 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>

但是,我对第二个属性有一个例外,因为它无法复制肯尼的仪器。歌曲被正确复制,没有任何异常被抛出

我得到这个例外:

线程“main” org.springframework.beans.factory.BeanCreationException 中的异常:创建类路径资源 [Beans.xml] 中定义的名称为“carl”的 bean 时出错:设置时无法解析对 bean '#{kenny.instrument}' 的引用bean 属性“仪器”;嵌套异常是 org.springframework.beans.factory.BeanExpressionException:表达式解析失败;嵌套异常是 org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 6): Field or property 'instrument' cannot be found on object of type 'com.springinaction.springidol.Instrumentalist'

知道如何复制仪器并将其设置为 id 为“carl”的 bean 吗?

4

1 回答 1

3

Aref是对另一个 bean 的引用;在您的情况下,您想使用beaninstrumemt属性的值。kenny

你应该使用

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

这假设有一个getInstrument()方法 on Instrumentalist

于 2013-07-06T19:47:01.337 回答