用于bean的Spring AOP代理创建错误使用spEL

时间:2014-10-14 17:04:02

标签: java spring spring-aop spring-el

我有以下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

1 个答案:

答案 0 :(得分:3)

这是一种预期的行为 - 会发生什么是Spring本质上会为kenny bean创建动态代理,动态代理将基于Perfomer接口,它没有歌曲属性(没有歌曲的getter或setter)因此例外。修复可能是将歌曲添加到Performer界面,这应该干净利落。