4
<bean id="eddie" class="com.springinaction.Instrumentalist">
    <property name="instrument" value="#{violin}"></property>
    <property name="song" value="#{kenny.song}"></property>

</bean>

<bean id="violin" class="com.springinaction.Violin">
</bean>


<bean id="kenny" class="com.springinaction.Instrumentalist">
    <property name="song" value="Kenny is a star,kenny is a star"></property>
    <property name="instrument" ref="saxopone"></property>
</bean>

<aop:config>

    <aop:aspect ref="audience">

        <aop:before pointcut="execution(* com.springinaction.Performer.perform(..))" method="takeSeats()"/>

        <aop:after-throwing method="demandRefund" pointcut="execution(* com.springinaction.Performer.perform(..))"/>

    </aop:aspect>

</aop:config>

在上面的代码中,我正在使用 Spring 表达式语言注入 beansonginstrument属性。eddie但是,song属性没有正确注入..我收到以下错误:

线程“主”org.springframework.beans.factory.BeanCreationException 中的异常:在类路径资源 [spring-config.xml] 中定义名称为“eddie”的 bean 创建错误:bean 初始化失败;嵌套异常是 org.springframework.beans.factory.BeanExpressionException:表达式解析失败;嵌套异常是 org.springframework.expression.spel.SpelEvaluationException:EL1008E:(pos 6):在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 的“$Proxy4”类型的对象上找不到字段或属性“歌曲”。 doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) 在 org.springframework.beans。

乐器属性被正确注入,因为歌曲属性没有被注入,这只是因为 aop..

当我评论<aop:config>它工作正常..

哪里不对了?

4

1 回答 1

4

你试过了吗

<aop:config proxy-target-class="true">
...
</aop:config>

通过这种方式,您可以获得一个动态子类,并且该属性应该在通过 Spring AOP 创建的代理中可用。

Spring AOP 的默认行为是为接口创建 Java 代理,因此任何类的属性都无法通过代理访问。

于 2010-08-28T16:56:18.650 回答