我正在通过 Spring in Action 第 3 版这本书学习 Spring。
我正在阅读关于 SpEL 中的三元表达式的部分:
它写道:
如果您希望 SpEL 表达式在条件为真时计算为一个值,否则为不同的值怎么办?例如,假设如果歌曲是“铃儿响叮当”,卡尔(前面的乐器演奏家)想弹钢琴,否则他会弹萨克斯管。在这种情况下,您可以使用 SpEL 的三元 (?:) 运算符:
<property name="instrument"
value="#{songSelector.selectSong()=='Jingle Bells'?piano:saxophone}"/>
如您所见,SpEL 的三元运算符的工作方式与 Java 的三元运算符相同。在这种情况下,如果所选歌曲是“Jingle Bells”,则乐器属性将与钢琴豆的参考相关联。否则,它将与 IDis 萨克斯管的 bean 连接。
我使用以下 xml 实现它:
<bean id="kenny"
class="com.springinaction.springidol.Instrumentalist"
p:song="Jingle Bells">
<property name="instrument"
value="#{kenny.song == 'Jingle Bells' ? piano:saxophone}"/>
</bean>
<bean id="piano"
class="com.springinaction.springidol.Piano" />
<bean id="saxophone"
class="com.springinaction.springidol.Saxophone" />
输出:
演奏铃儿响叮当:嘟嘟嘟
这是不正确的,应该是:
演奏铃儿响叮当:PLINK PLINK PINK
我检查了测试是否使用了正确的 xml 并获得了正确的 bean,并且仪器的声音是正确的。(TOOT TOOT TOOT 用于萨克斯管,PLINK PLINK PINK 用于钢琴)
任何想法?谢谢。