在 Groovy 中使用 @Value Spring 注解
Posted
技术标签:
【中文标题】在 Groovy 中使用 @Value Spring 注解【英文标题】:Using @Value Spring Annotation with Groovy 【发布时间】:2011-08-04 15:20:38 【问题描述】:我有一个 groovy 类,我想在其中自动装配一个属性值。
例如:
public @Value("$valueA" ) String valueA;
在我的应用程序上下文中添加属性占位符
<context:property-placeholder location="classpath:spring/app.properties" />
app.properties 为“valueA”设置了一个值,因此理论上这应该在运行时填充我的类中的字符串 valueA。
如果我使用 java 类,但如果我使用 groovy 类,则此设置非常有效。
我得到一个编译错误:
错误:预期 '$valueA' 是 @org.springframework.beans.factory.annotation.Value 中 java.lang.String 类型的内联常量 错误:属性“值”应具有类型“java.lang.String”;但在@org.springframework.beans.factory.annotation.Value 中找到了类型'java.lang.Object'
我只想知道在使用 groovy 类时上述语法是否正确,如果不正确,在运行时自动装配 @Value 参数的正确语法是什么。
【问题讨论】:
感谢您提出这个问题。这让我有点发疯,但下面的答案可以解决问题。 【参考方案1】:使用单引号,即。
public @Value('$valueA') String valueA
【讨论】:
这是因为使用双引号得到的是 GString 而不是 String 并且替换是在错误的时间完成的吗? 谢谢,这对我的 Groovy 项目产生了影响。我怀疑这在 Java 中不会发生,因为没有 GString 类型。 这似乎有效,但在尝试使用默认值时无效。public @Value('$propertyName:defaultValue') String valueA
在这种情况下,“defaultValue”总是用作 propertyName 的值,即使在属性文件中被覆盖。不使用属性文件中的值。【参考方案2】:
由于使用 $ 会导致 Groovy 将注解参数解释为 GString,因此会出现编译错误。您可以转义 \$ 或使用单引号。
【讨论】:
以上是关于在 Groovy 中使用 @Value Spring 注解的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Groovy 映射转换为 key="value" 字符串?