Java 注释属性的值必须是常量表达式

Java 注释属性的值必须是常量表达式,java,spring,annotations,Java,Spring,Annotations,我有一个属性文件,由spring注释读取,如下所示 @Value("${platform}") private String platform; 获取平台参数后,我想根据platform参数值读取第二个参数 @Value("${url." + platform + ."ws}") private String url; 但这会产生错误,“注释属性的值必须是常量表达式”。 由于根据“平台”值有很多参数变化,我正在寻找一个通用的解决方案。在编译时对参数进行评估。因

我有一个属性文件,由spring注释读取,如下所示

    @Value("${platform}")
    private String platform;
获取平台参数后,我想根据
platform
参数值读取第二个参数

    @Value("${url." + platform + ."ws}")
    private String url;
但这会产生错误,“注释属性的值必须是常量表达式”。
由于根据“平台”值有很多参数变化,我正在寻找一个通用的解决方案。

在编译时对参数进行评估。因此它需要是
final
static final
(即
Enum


我不知道
@Value
注释是否允许这样做。但您始终可以实现自己的注释。在Java注释中无法进行扩展。

您不能在@Value表达式中直接访问
平台
,但可以使用Spring表达式语言来实现最终目标

@Value("${platform}")
private String platform;

@Value("#{'Url.'.concat(${platform}).concat('.ws')}")
private String url;

那么,有没有一种方法可以使用第一个参数值来获取第二个参数?有没有任何示例可以帮助我扩展@value注释?我是春季注释的新手。不,这是不可能的,但你可以使用自己的注释。