2010-08-28 25 views
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> 

工作在上面的代碼,我注入song,使用彈簧表達式語言eddie bean的instrument財產。但是,song財產不注射properly..and我收到以下錯誤:春天表達式語言不與Spring AOP的

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'eddie' defined in class path resource [spring-config.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 6): Field or property 'song' cannot be found on object of type '$Proxy4' at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at com.springinaction.Main.main(Main.java:10)

儀器屬性正確注入其中的歌曲屬性沒有注入這是因爲只有AOP的發生..

當我評論出<aop:config>它工作正常..

有什麼問題嗎?

回答

4

你嘗試

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

這樣你會得到一個動態的子類和屬性應該在通過Spring AOP創建的代理可用。

Spring AOP的默認行爲是爲接口創建一個Java代理,所以任何類的屬性都不能通過代理訪問。

+0

是的,它是工作.. 感謝您的時間蒂莫.. Spring AOP的真正吃我的大腦:) – javanoob 2010-08-28 17:16:52

+0

'春Action'本書不談論這些細節了想我要讀春天參考.. – javanoob 2010-08-28 17:24:00

+0

是的,更好地閱讀這些事情的參考。 – 2010-08-28 17:26:19