Spring: Configuring Bean with a two argument setter

吃可爱长大的小学妹 提交于 2019-12-04 04:22:23

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>

I believe HttpConnectionParamBean and HttpProtocolParamBean were created for precisely this purpose. Documentation Example

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!