Using @Value Spring Annotation with Groovy
I have a groovy class where I wan to autowire a property value.
Eg:
public @Value("${valueA}" ) String valueA;
With the addition of the the property-placeholder in my appliction context
<context:property-placeholder location="classpath:spring/app.properties" />
The app.properties has a value set for "valueA" so in theory this should populate the String valueA in my class at runtime.
This setup works perfectly if I use a java class but not if I use a groovy class.
I get a compile error:
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
I just want to know if the above syntax is correct when using a groovy class and if not what is the correct syntax for autowiring the @Value parameter at runtime.
Solution 1:
Use single quotes, ie.
public @Value('${valueA}') String valueA
Solution 2:
since using a $ causes Groovy to interpret the annotation argument as a GString, you get a compile error. you can either escape \$ or use single quotes.