1

我的 spring '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 'addResponseInterceptor' 的值是null! 我不明白为什么我可以得到null一个春豆。

4

1 回答 1

2

顾名思义,它addResponseInterceptor的唯一目的是调用一个方法。MethodInvokingFactoryBean执行时context.getBean("addResponseInterceptor")返回的getObjectFactoryBean.

返回被调用方法的MethodInvokingFactoryBean结果。

从被调用方法的名字来看addResponseInterceptor,就是voidvoidVoid导致nullMethodInvokingFactoryBean.

如果您想实际FactoryBean添加一个&到您要检索的 bean 的名称。请参阅参考指南第 5.8.3 节的最后部分。

于 2015-01-16T06:58:44.217 回答