2015-01-16 43 views
1

我的 'applicationContext.xml的' 春天文件是:當我從春天得到一顆豆子時,爲什麼我會變空?

<bean id="gzipResponseInterceptor" class="my.interceptor.GzipResponseInterceptor"/> 

<bean id="addResponseInterceptor" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetObject"> 
     <ref local="httpClient"/> 
    </property> 
    <property name="targetMethod"> 
     <value>addResponseInterceptor</value> 
    </property> 
    <property name="arguments"> 
     <list> 
      <ref bean="gzipResponseInterceptor"/> 
     </list> 
    </property> 
</bean> 

<bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient"> 
    <constructor-arg> 
     <bean class="org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager" p:defaultMaxPerRoute="100" 
       p:maxTotal="100"/> 
    </constructor-arg> 
</bean> 

然後在我的Java代碼:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 
System.out.println(context.getBean("gzipResponseInterceptor")); 
System.out.println(context.getBean("addResponseInterceptor")); 
System.out.println(context.getBean("httpClient")); 

而且它打印:豆的

[email protected] 
null 
[email protected] 

通知值'addResponseInterceptor'是null!我不明白爲什麼我可以得到null春豆。

回答

2

addResponseInterceptor是一個MethodInvokingFactoryBean,其唯一目的就是顧名思義就是調用一個方法。在做context.getBean("addResponseInterceptor")時返回的是FactoryBeangetObject方法的結果。

MethodInvokingFactoryBean返回調用方法的結果。

用正在調用的方法的名稱來判斷,addResponseInterceptor,即voidvoidVoid導致null結果從MethodInvokingFactoryBean返回。

如果您想要實際的FactoryBean&添加到要檢索的bean的名稱。參見參考指南的section 5.8.3的最後部分。

相關問題