2011-03-11 18 views
27

Tratando de propiedades de auto-alambre a un grano en la primavera 3.0.5.RELEASE, estoy usando:primavera 3.0.5 no evalúa anotación @Valor de propiedades

  • config.properties:

    username=myusername 
    
  • main-components.xml:

    <context:property-placeholder location="classpath:config.properties" /> 
    
  • MiClase:

    @Service 
    public class MyClass { 
    
        @Value("${username}") 
        private String username; 
        ... 
    } 
    

Como resultado, nombre de usuario consigue el sistema de literalmente"${username}", por lo que la expresión no consigue analizados. Mis otras dependencias auto-cableadas en esta clase se configuran y Spring no lanza ninguna excepción. También traté de agregar @Autowired pero no sirvió.

Si analizo propiedades a un bean separado y luego usar @Autowired + @Qualifier, funciona:

<bean id="username" class="java.lang.String"> 
    <constructor-arg value="${username}"/> 
</bean> 

Alguna idea de cómo utilizan simplemente @Value? Tal vez necesito incluir alguna dependencia de primavera que no tengo? Gracias

+16

¿Estás seguro de que tienes '' en el mismo contexto de aplicación que tu bean 'MyClass' (no en el contexto principal)? – axtavt

+0

Tienes razón. Moví desde el contexto definido por ContextLoaderListener al contexto de servlet. Ahora mis valores se analizan. ¡Muchas gracias! –

+1

bastante útil hacer aquí es establecer ignorar-reemplazables-marcadores de posición en falso - por lo tanto, la aplicación fallará si no puede resolver los titulares de lugar - que es lo que su problema fue –

Respuesta

18

Encontré cuál era el problema. Copiar/pegar de los comentarios:

¿Estás seguro de que tienes <context:property-placeholder> en el mismo contexto de aplicación que tu bean MyClass (no en el contexto principal)? - axtavt

Tienes razón. Moví <context:property-placeholder> desde el contexto definido por ContextLoaderListener al contexto del servlet. Ahora mis valores se analizan. ¡Muchas gracias! - alex

Cuestiones relacionadas