2010-11-17 5 views
20

Mi primavera frijol tener un constructor con un argumento obligatorio única, y he conseguido inicializar con la configuración xml:Cómo inyectar un valor al constructor de frijol mediante anotaciones

<bean name="interfaceParameters#ota" class="com.company.core.DefaultInterfaceParameters"> 
    <constructor-arg> 
    <value>OTA</value> 
    </constructor-arg> 
</bean> 

Luego uso de este cultivo como éste y funciona bien

@Resource(name = "interfaceParameters#ota") 
private InterfaceParameters interfaceParameters; 

Pero me gustaría especificar el valor arg contructor con los annocations, algo así como

@Resource(name = "interfaceParameters#ota") 
@contructorArg("ota") // I know it doesn't exists! 
private InterfaceParameters interfaceParameters; 

Es esto posible?

Gracias de antemano

+0

Quizás la respuesta se da [aquí] (http://stackoverflow.com/a/2306468/267197). –

Respuesta

45

primer lugar, hay que especificar el arg constructor en la definición de frijol, y no en sus puntos de inyección. A continuación, puede utilizar de primavera @Value anotación (primavera 3,0)

@Component 
public class DefaultInterfaceParameters { 

    @Inject 
    public DefaultInterfaceParameters(@Value("${some.property}") String value) { 
     // assign to a field. 
    } 
} 

This is also encouraged as Spring advises constructor injection over field injection.

Por lo que yo veo el problema, esto podría no le conviene, ya que pareces definir varios granos de la misma clase, nombrado de manera diferente. Para eso no puede usar anotaciones, debe definirlas en XML.

Sin embargo, no creo que sea una buena idea tener estos diferentes frijoles. Será mejor que use solo los valores de cadena. Pero no puedo dar más información, porque no sé tus clases exactas.

+0

gracias por su respuesta, ¿qué quiere decir con "usar solo los valores de cadena"? – tbruyelle

+0

bueno, necesitas la cadena "OTA". No necesitas un objeto completo para eso. – Bozho

+0

oh Veo, la cadena "OTA" se usa en el método @postConstruct de mi bean y es una información obligatoria para construir el bean. La cadena se usa para recuperar datos de la base de datos. Cada bean de este tipo devolverá diferentes datos para cada valor de cadena. Por cierto, tienes razón sobre el uso de xml, ya que defino beans múltiples para la misma clase, no puedo usar anotaciones. – tbruyelle

1

Como se ha dicho Bozho, en lugar de constructor arg se podía establecer la propiedad ... @ PostConstruct solamente se llamará después de que todas las propiedades se establecen ... así que, de todas maneras tendrá su cadena disponibles ...

Cuestiones relacionadas