2011-04-13 19 views
27

Tengo una clase maravillosa donde quiero conectar el valor de una propiedad.Usando @Value Spring Annotation con Groovy

Ej:

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

Con la adición de la propiedad-marcador de posición en mi contexto appliction

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

Los app.properties tiene un valor establecido para "valorA" por lo que en teoría, esto debería rellene el Valor de cadena A en mi clase en tiempo de ejecución.

Esta configuración funciona perfectamente si utilizo una clase Java pero no si uso una clase groovy.

me sale un error de compilación:

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

sólo quiero saber si la sintaxis es correcta cuando se utiliza una clase maravilloso y si no lo es la sintaxis correcta para Autowiring el parámetro @Valor en tiempo de ejecución.

+0

Gracias por preguntar esto. Me estaba volviendo loco, pero las respuestas a continuación son el truco. –

Respuesta

47

Use comillas simples, es decir.

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

¿Esto se debe a que con comillas dobles obtiene un GString en lugar de un String y la sustitución se realiza en el momento equivocado? –

+0

Sí, eso creo. – sourcedelica

+0

Gracias, esto me afectó en mi proyecto Groovy. Sospecho que esto no ocurre en Java ya que no hay ningún tipo de cadena de caracteres. – Sion

23

desde hace uso de un $ maravilloso interpretar el argumento como una anotación GString, se obtiene un error de compilación. puede escapar \ $ o usar comillas simples.

+0

Esto debe marcarse como la respuesta aceptada –

Cuestiones relacionadas