java - 如何在 Spring `@Value` 注释中插入类常量?

标签 java spring

我想让Spring分配一个属性值。

public class Foobar {

    @Value("${example.property.foo:bar}")
    private String foo;
}

假设我想在几个不同的地方引用 example.property.foo,所以我宁愿将该标志分配为 Foobar 上的常量:

public class Foobar {
    public static final String FOO_PROPERTY_FLAG = "example.property.foo";
}

example.property.foo=whatever 的设置发生在其他地方(作为系统属性,或在 @TestPropertySource 中)。

如何在注释中引用FOO_PROPERTY_FLAG?这有效:

@Value("${" + FOO_PROPERTY_FLAG + ":bar}")

但是有点丑。我可以在这里使用 "#{}" 表达式语法吗?

@Value("${#{FOO_PROPERTY_FLAG}:bar}")  // doesn't work; value is never injected

最佳答案

你可以这样做:

public static final String KEY = "propertyName";

@Value("#{T(a.b.c.package.MyConstants).KEY}")

重要的部分是指定包和类。否则 spring 将尝试在实际执行 SpEL 的 BeanExpressionContext 中查找常量

关于java - 如何在 Spring `@Value` 注释中插入类常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45618779/

相关文章:

java - 对话框上的 EditText 不返回任何文本

java - Spring Boot 同一端点的多种请求类型

java - Spring - 延迟注入(inject)

spring - Tomcat 9 Spring MVC 应用程序 JS 文件使用 header text/html 而不是 application/javascript 下载

java - 如何让进度条慢慢填充

java - 如何使用共享首选项保存/检索位图的文件路径

java - 启动时的 TomEE 问题

java - Checkerframework替换注解

java - 如何在执行JAR时外部向spring boot提供mysql主机

java - 如何创建没有标识符字段(主键)的 Spring Roo 实体