web-dev-qa-db-fra.com

Spring 3.0.5 n'évalue pas l'annotation @Value à partir des propriétés

Essayer de câbler automatiquement les propriétés à un bean dans Spring 3.0.5.RELEASE, j'utilise:

  • config.properties:

    username=myusername
    
  • main-components.xml:

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

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

Par conséquent, le nom d'utilisateur est défini sur littéralement"${username}", donc l'expression n'est pas analysée. Mes autres dépendances câblées automatiquement sur cette classe sont définies, et Spring ne lève aucune exception. J'ai également essayé d'ajouter @Autowired mais cela n'a pas aidé.

Si j'analyse des propriétés dans un bean distinct, puis j'utilise @Autowired + @Qualifier, Ça marche:

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

Toutes les idées comment utiliser juste @Value? Peut-être que je dois inclure une dépendance Spring que je n'ai pas? Je vous remercie

30
Alex Yarmula

J'ai trouvé quel était le problème. Copiez/collez à partir des commentaires:

Êtes-vous sûr d'avoir <context:property-placeholder> dans le même contexte d'application que votre bean MyClass (pas dans le contexte parent)? - axtavt

Vous avez raison. J'ai déménagé <context:property-placeholder> du contexte défini par ContextLoaderListener au contexte de servlet. Maintenant, mes valeurs sont analysées. Merci beaucoup! - alex

20
Alex Yarmula