<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表达式语言注入song
bean的instrument
,eddie
属性。但是,song
属性未正确注入..我得到以下错误:
线程“main”中的异常 org.springframework.beans.factory.BeanCreationException: 创建名为'eddie'的bean时出错 在类路径资源中定义 [spring-config.xml]:初始化 豆子失败了;嵌套异常是 org.springframework.beans.factory.BeanExpressionException: 表达式解析失败;嵌套 例外是 org.springframework.expression.spel.SpelEvaluationException: EL1008E :(位置6):场地或财产 '歌'无法在对象上找到 在'$ Proxy4'输入 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) 在 org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:290) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416) 在 org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139) 在 org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83) 在 com.springinaction.Main.main(Main.java:10)
在没有注入歌曲属性的地方正确地注入了乐器属性,并且这种情况只是因为aop而发生..
当我评论<aop:config>
时它工作正常..
有什么不对吗?
答案 0 :(得分:4)
你试过吗
<aop:config proxy-target-class="true">
...
</aop:config>
通过这种方式,您将获得一个动态子类,并且该属性应该在通过Spring AOP创建的代理中可用。
Spring AOP的默认行为是为接口创建Java代理,因此无法通过代理访问任何类的属性。