【问题标题】:Spring: Configuring Bean with a two argument setterSpring:使用两个参数设置器配置 Bean
【发布时间】:2011-07-15 19:38:13
【问题描述】:

我想使用 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/

谢谢!

【问题讨论】:

    标签: java spring configuration javabeans


    【解决方案1】:

    我相信 HttpConnectionParamBean 和 HttpProtocolParamBean 正是为此目的而创建的。 DocumentationExample

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        严格来说:有两个参数的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>
        

        【讨论】:

        • 谢谢,我认为没有办法完全使用 spring 我们最终做的是实现一个 Spring FactoryBean,它可以提供必要的连接工厂,然后配置看起来像: 其中 httpParamFactory 是我们 FactoryBean 的一个实例。
        • @craftsmanadam 我最初是建议这样做的,但我不知道你是否自己创建了 Params 对象,所以我选择了一个应该总是有效的解决方案(但你的可能更春天-喜欢)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多