Spring:使用两个参数setter配置Bean

时间:2011-03-15 13:42:00

标签: java spring configuration javabeans

我想使用spring setter注入配置HttpParams但是HttpParams有两个参数setter(setParameter(String name,Object object))。有人知道在春天配置这个的方法吗?

我能想到的最接近的就像你会做一个List,Set或Property配置:

http://www.mkyong.com/spring/spring-collections-list-set-map-and-properties-example/

谢谢!

3 个答案:

答案 0 :(得分:9)

严格来说:具有两个参数的setter不是setter。 它违反了Spring构建的JavaBeans约定。没有简单的方法可以解决这个问题。


作为替代方案,这里有一个Helper类,您可以使用它来配置Spring的HttpParams对象:

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());
        }

    }

}

像这样连线:

<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>

答案 1 :(得分:3)

我相信HttpConnectionParamBean和HttpProtocolParamBean是为了这个目的而创建的。 Documentation Example

答案 2 :(得分:1)

您使用的是Apache HttpClient吗?如果是这样,HttpParams的HttpClientParams实现有你可以使用的真正的getter和setter。

否则,我建议编写一个简单的HttpParamsFactory,你可以传递一个包含你需要的参数的地图,并构建一个适当的HttpParams实例。