2011-03-15 9 views
7

Me gustaría configurar un HttpParams usando la inyección del setter de primavera, pero HttpParams tiene un setter de dos argumentos (setParameter (String name, Object object)). ¿Alguien sabe de una forma de configurar esto en primavera?Spring: Configurando Bean con un setter de dos argumentos

Lo más cerca que puedo pensar es igual que lo haría un List, Set o la configuración del inmueble:

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

Gracias!

Respuesta

9

Estrictamente hablando: Un colocador con dos parámetros no es un colocador. Viola la convención de JavaBeans, en la cual Spring construye. No hay una manera simple de resolver eso.


Como alternativa, esto es una clase de ayuda que puede utilizar para configurar sus HttpParams objeto con la primavera:

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

    } 

} 

alambre así:

<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

Gracias Pensé que no había una manera de hacerlo puramente con la primavera lo que terminamos haciendo es implementar un Spring FactoryBean que puede suministrar la conexión necesaria de fábrica luego la configuración se ve así: con httpParamFactory siendo una instancia de nuestro FactoryBean. – craftsmanadam

+0

@craftsmanadam Inicialmente iba a sugerir eso, pero no sabía si tú mismo creaste el objeto Params, así que busqué una solución que siempre funcionara (pero la tuya probablemente sea más primaveral) –

1

¿Está utilizando Apache HttpClient ? Si es así, la implementación HttpClientParams de HttpParams tiene getters y setters reales que puedes usar.

De lo contrario, sugeriría escribir una HttpParamsFactory simple que podría pasar un mapa que contiene los parámetros que necesita y construir una instancia adecuada de HttpParams.

Cuestiones relacionadas