在Groovy中使用@Value Spring注释

在Groovy中使用@Value Spring注释,spring,groovy,annotations,properties,Spring,Groovy,Annotations,Properties,我有一个groovy类,我想在其中自动关联属性值 例如: 在我的应用程序上下文中添加了属性占位符 <context:property-placeholder location="classpath:spring/app.properties" /> app.properties为“valueA”设置了一个值,因此从理论上讲,这应该在运行时填充类中的字符串valueA 如果我使用java类,这个设置就可以完美地工作,但是如果我使用groovy类,这个设置就不能工作 我得到一个编译

我有一个groovy类,我想在其中自动关联属性值

例如:

在我的应用程序上下文中添加了属性占位符

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

app.properties为“valueA”设置了一个值,因此从理论上讲,这应该在运行时填充类中的字符串valueA

如果我使用java类,这个设置就可以完美地工作,但是如果我使用groovy类,这个设置就不能工作

我得到一个编译错误:

错误:在@org.springframework.beans.factory.annotation.Value中,“$valueA”应为java.lang.String类型的内联常量
错误:属性“value”的类型应为“java.lang.String”;但在@org.springframework.beans.factory.annotation.Value中找到了类型“java.lang.Object”


我只想知道在使用groovy类时上述语法是否正确,如果不正确,在运行时自动连接@Value参数的正确语法是什么

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

由于使用$会导致Groovy将注释参数解释为GString,因此会出现编译错误。您可以转义\$或使用单引号。

这是因为使用双引号可以得到一个GString而不是字符串,并且替换在错误的时间完成吗?谢谢,这影响了我在Groovy项目中的工作。我怀疑这在Java中不会发生,因为没有GString类型。这似乎可以工作,但在尝试使用默认值时不行
public@Value(“${propertyName:defaultValue}”)字符串值a
在这种情况下,“defaultValue”始终用作propertyName的值,即使在属性文件中被重写。属性文件中的值未被使用。感谢您的询问。这让我有点疯狂,但下面的答案确实起到了作用。
public @Value('${valueA}') String valueA