问题
I would like to configure a HttpParams using spring setter injection but HttpParams has a two argument setter ( setParameter(String name, Object object) ). Is anyone aware of a way to configure this in spring?
The closest I can think of is like you would do a List, Set, or Property configuration:
http://www.mkyong.com/spring/spring-collections-list-set-map-and-properties-example/
Thanks!
回答1:
Strictly speaking: A setter with two parameters is not a setter. It violates the JavaBeans convention, on which Spring builds. There is no simple way to solve that.
As an alternative, here's a Helper class you can use to configure your HttpParams object with Spring:
public class HttpParamSetter{
private HttpParams httpParams;
public void setHttpParams(HttpParams httpParams){
this.httpParams = httpParams;
}
private Map<String, Object> parameters;
public void setParameters(Map<String, Object> parameters){
this.parameters = parameters;
}
@PostConstruct
public void applyParameters(){
for(Entry<String, Object> entry:parameters.entrySet()){
httpParams.setParameter(entry.getKey(), entry.getValue());
}
}
}
Wire it like this:
<bean class="com.yourcompany.HttpParamSetter">
<property name="httpParams" ref="httpParams" />
<property name="parameters">
<map>
<entry key="foo" value="bar" />
<entry key="baz" value="phleem" />
</map>
</property>
</bean>
回答2:
I believe HttpConnectionParamBean and HttpProtocolParamBean were created for precisely this purpose. Documentation Example
回答3:
Are you using Apache HttpClient? If so, the HttpClientParams implementation of HttpParams has real getters and setters that you can use.
Otherwise, I'd suggest writing a simple HttpParamsFactory that you could pass a map that contains the parameters you need and construct an appropriate instance of HttpParams.
来源:https://stackoverflow.com/questions/5312605/spring-configuring-bean-with-a-two-argument-setter