我正在尝试设置HostConfiguration bean。它具有的属性之一称为proxyHost
。但是,Apache HostConfiguration类不遵循Java Bean约定。 proxyHost的setter接受类型为ProxyHost的参数,而getter返回字符串。
我的applicationContext.xml
中有以下代码段。
<bean id="proxyHost" class="org.apache.commons.httpclient.ProxyHost">
<constructor-arg index="0" type="java.lang.String" value="myproxy.com" />
<constructor-arg index="1" type="int" value="8087" />
</bean>
<bean id="hostConfiguration" class="org.apache.commons.httpclient.HostConfiguration">
<property name="proxyHost" ref="proxyHost" />
</bean>
当我尝试为应用程序加载applicationContext时,由于
HostConfigurationClass
没有返回ProxyHost或采用String的setter的getProxyHost
,因此出现以下错误:-org.springframework.beans.NotWritablePropertyException:Bean类[org.apache.commons.httpclient.HostConfiguration]的无效属性'proxyHost':Bean属性'proxyHost'是不可写的或具有无效的setter方法:该参数类型是否为setter匹配getter的返回类型?
在springsource论坛上搜索时,我遇到了这个thread,建议使用MethodInvokingFactoryBean来解决这个问题。
我不确定使用
MethodInvokingFactoryBean
有什么帮助,因为我需要从ProxyHost
方法返回getProxyHost()
的返回类型来解决此问题,对吗?我也不确定如何在这种情况下使用它。我不清楚MethodInvokingFactoryBean
的内部。因此,如果有人可以在上述情况下给我一个示例,说明如何使用MethodInvokingFactoryBean
,将有很大帮助。这也是在 Spring 设置不遵循约定的Bean(如
HostConfiguration
)的公认方法吗?谢谢!
最佳答案
首先,实例化ProxyHost
(即ProxyHost proxyHost = new ProxyHost("myproxy1.com",8080);
<bean id="proxyHost" class="org.apache.commons.httpclient.ProxyHost">
<constructor-arg index="0" type="java.lang.String" value="myproxy1.com" />
<constructor-arg index="1" type="int" value="8088" />
</bean>
然后实例化
HostConfiguration
对象(即
HostConfiguration hostConfiguration = new HostConfiguration();
<bean id="hostConfiguration" class="org.apache.commons.httpclient.HostConfiguration" />
之后,使用
MethodInvokingFactoryBean
调用setProxyHost()
上的HostConfiguration
并将proxyHost
作为参数传递。(即
hostConfiguration.setProxyHost(proxyHost);
) <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<ref local="hostConfiguration"/>
</property>
<property name="targetMethod">
<value>setProxyHost</value>
</property>
<property name="arguments">
<ref local="proxyHost"/>
</property>
</bean>