我有以下bean定义:
<bean id="kenny" class="com.springinaction.spingidol.performers.Instrumentalist"
p:song="'Disert Rose'" p:instrument="#{pianoInstrument}" />
<bean id="carl" class="com.springinaction.spingidol.performers.Instrumentalist"
p:song="#{kenny.song?.toUpperCase()}"
p:instrument="#{kenny.song.contains('Rose')?saxophoneInstrument:harmonicaInstrument}"/>
请注意,carl
的{{1}}属性是根据instrument
kenny
属性创建的。
在运行我的应用程序时,只要我没有使用Spring AOP,它就完美地工作。
当我添加一个引用song
bean的方面时,但是:
carl
<aop:before method="takeSeats" pointcut="execution(* com.springinaction.spingidol.performers.Performer.perform(..))"/>
和carl
bean都实现kenny
接口,因此我得到以下异常:
Performer
答案 0 :(得分:3)
这是一种预期的行为 - 会发生什么是Spring本质上会为kenny
bean创建动态代理,动态代理将基于Perfomer
接口,它没有歌曲属性(没有歌曲的getter或setter)因此例外。修复可能是将歌曲添加到Performer
界面,这应该干净利落。