我的' 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"));
它打印出来:
my.interceptor.GzipResponseInterceptor@525f1e4e
null
org.apache.http.impl.client.DefaultHttpClient@75f9eccc
注意bean&#39; addResponseInterceptor&#39;的值。是null
!我无法理解为什么我可以获得null
的春豆。
答案 0 :(得分:2)
addResponseInterceptor
是MethodInvokingFactoryBean
,顾名思义,其唯一目的是调用方法。在执行context.getBean("addResponseInterceptor")
时,返回的内容是getObject
的{{1}}方法的结果。
MethodInvokingFactoryBean
返回被调用方法的结果。
根据被调用方法的名称FactoryBean
判断,即addResponseInterceptor
。 void
或void
会导致Void
结果从null
返回。
如果您希望实际MethodInvokingFactoryBean
将FactoryBean
添加到要检索的bean的名称。请参阅参考指南的section 5.8.3的最后一部分。