在 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 注解的主要内容,如果未能解决你的问题,请参考以下文章

springboot 中使用thymeleaf

groovy运行程序和类型推断

如何将 Groovy 映射转换为 key="value" 字符串?

检查 Integer 在 groovy 中是 Null 还是数字?

在 groovy 中动态执行代码

groovy使用范型的坑