2010-02-21 12 views
7

Estoy tratando de configurar una clase con una configuración basada en anotaciones en la primavera 3, que toma valores primitivos como sus argumentos de constructor:de primavera: la inyección de constructor de valores primitivos (propiedades) con configuración basada en anotación

@Component 
class MyBean { 
    MyBean(String arg1, String arg2) { 
    // ... 
    } 
} 

Y un contexto de aplicación de esta manera:

<beans [...]> 
    <context:component-scan base-package="com.example" /> 
    <context:property-override location="/WEB-INF/example.properties" /> 
</beans> 

estoy tratando de encontrar alguna manera de especificar que los argumentos del constructor deben ser tomadas desde el archivo de propiedades. Aparentemente, esto funciona con constructores que toman beans regulares (por ejemplo, MyClass(Bean bean1, OtherBean bean2)), pero solo propiedades?

También intenté anotar los argumentos del constructor con la anotación @Value de Spring 3 y una expresión EL para el valor, como @Value("#{prop.Prop1}") arg1, pero parece que tampoco funciona.

Respuesta

16

El siguiente código funciona bien con <context:property-placeholder .../>:

@Component 
public class MyBean { 
    @Autowired 
    public MyBean(@Value("${prop1}") String arg1, @Value("${prop2}") String arg2) { 
     // ... 
    } 
} 

Pero <context:property-override .../> es una cosa muy específica, no es adecuada aquí.

+0

¿El archivo de propiedades tendrá "myBean.prop1 = foo" o solo "prop1 = foo"? Es decir, ¿las propiedades están delimitadas por el nombre del bean? –

+0

El archivo de propiedad tendrá 'prop1 = foo'. Si necesita 'myBean.prop1 = foo', escriba' @Value ("$ {myBean.prop1}") '. Es la forma en que funciona ''. – axtavt

Cuestiones relacionadas