spring - 在 Spring 和 SPeL 中使用 @Value 注释

标签 spring

我正在尝试找到一种方法在我的 Spring Boot 1.5 应用程序中执行以下操作。

  1. 我有一个变量,其值是动态的,这意味着它来自外部系统。

    字符串名称 = "abc";//从外部设置

  2. 我想尝试使用名称的值来查找我的属性文件并查看是否定义了匹配的属性。类似的东西..

    @Value("#{myClassName.name.concat('something')}") 字符串属性值;

现在我的 application.property 文件具有以下属性集 假设 name 的值为“abc”

属性文件内容:

abc.something:abcValue

现在,当我尝试访问变量 propertyValue 的值时,它会被设置为值 abc.something 而不是 abcValue

我可能认为我不能将 @Value#{} 一起使用来实现这一点,我想知道是否有办法使用 #{ }${} 内,以便我在使用 #{} 计算属性名称后获取属性值。

如果您需要更多详细信息,请告诉我。

最佳答案

bean 生命周期需要在编译时解析属性。因此,@Value 需要常量参数。

enter image description here

您可以使用Environment bean 以编程方式访问您的属性。

import org.springframework.core.env.Environment;

@Service
public class Serivce {

    @Autowired
    private Environment environment;

    public String getProperty(final String keyPart) {
        String key = "build.your." + keyPart;
        return environment.getProperty(key)
    }
}

顺便说一句,您可以在 SpEL 中使用 #('${spring.some.property}') 来访问占位符。

// This is valid access to property
@Value("#('${spring.some.property}')")
private String property;

关于spring - 在 Spring 和 SPeL 中使用 @Value 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45020151/

相关文章:

java - 在运行时更改 Autowiring 对象

java - 在 Spring boot 应用程序中更新一行

java - 为什么 JasperReports 会尝试加载 org.springframework.core.io.Resource 类?

java - Spring boot 测试 - 模拟配置

spring - 带 Spring 的 Tomcat

java - 交易问题 : No Hibernate Session bound to thread

java - 在验证错误中隐藏 "Spring-WS"

Javafx Spring Boot - 运行应用程序时出错

java - 无法将目标文件夹添加到 .gitignore

java - 严重 : A child container failed during start