2011-04-13 4 views
27

J'ai une classe groovy où je veux autowire une valeur de propriété.Utilisation de @Value Printemps Annotation avec Groovy

Par exemple:

public @Value("${valueA}") String valueA; 

Avec l'ajout de la propriété espace réservé dans mon appliction contexte

<context:property-placeholder location="classpath:spring/app.properties" /> 

Le app.properties a une valeur définie pour « valueA » donc en théorie cela devrait remplir la chaîne valeurA dans ma classe lors de l'exécution.

Cette configuration fonctionne parfaitement si j'utilise une classe java mais pas si j'utilise une classe groovy.

je reçois une erreur de compilation:

Error: expected '$valueA' to be an inline constant of type java.lang.String in @org.springframework.beans.factory.annotation.Value
Error: Attribute 'value' should have type 'java.lang.String'; but found type 'java.lang.Object' in @org.springframework.beans.factory.annotation.Value

Je veux juste savoir si la syntaxe ci-dessus est correcte lorsque vous utilisez une classe groovy et sinon quelle est la syntaxe correcte pour Autowiring le paramètre @Value lors de l'exécution.

+0

Merci d'avoir posé cette question. Cela me rendait un peu fou mais les réponses ci-dessous font l'affaire. –

Répondre

47

Utilisez des guillemets simples, c.-à-d.

public @Value('${valueA}') String valueA 
+0

Est-ce parce que, avec des guillemets, vous obtenez un GString au lieu d'un String et la substitution est faite au mauvais moment? –

+0

Oui, je le crois. – sourcedelica

+0

Merci, cela m'a affecté dans mon projet Groovy. Je suppose que cela n'arrive pas en Java car il n'y a pas de type GString. – Sion

23

puisque l'utilisation de $ provoque Groovy pour interpréter l'argument d'annotation comme un GString, vous obtenez une erreur de compilation. vous pouvez soit échapper \ $ ou utiliser des guillemets simples.

+0

Ceci devrait être marqué comme la réponse acceptée –

Questions connexes