spring @Value 默认值能使用其他静态变量或者常量作为默认值吗?

作者站长头像
站长
· 阅读数 7

spring 中 @Value 默认值可以使用下面的形式:

@Value("${config.data:configvaluesdata}")private String configData;

private static String CONFIG_DATA = "some config data";

上面的代码, 怎么使用 CONFIG_DATA 作为 configData 配置的默认值?

回复
1个回答
avatar
test
2024-06-30

当没有相应的配置项时,可以有多种提供默认值的方式:

package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyConfig {
    @Value("${config.data:}")
    private String nodefault;

    @Value("${config.data:el default}")
    private String eldefault;

    @Value("${config.data:#{null}}")
    private String fielddefault="field default";

    @Value("${config.data:#{T(com.example.demo.MyConfig).CONFIG_DATA}}")
    private String staticdefault;


    @Value("${config.data:from el default}")
    private String all = CONFIG_DATA;


    public static String CONFIG_DATA = "from static data";


    public String getNodefault() {
        return nodefault;
    }

    public void setNodefault(String nodefault) {
        this.nodefault = nodefault;
    }

    public String getEldefault() {
        return eldefault;
    }

    public void setEldefault(String eldefault) {
        this.eldefault = eldefault;
    }

    public String getFielddefault() {
        return fielddefault;
    }

    public void setFielddefault(String fielddefault) {
        this.fielddefault = fielddefault;
    }

    public String getStaticdefault() {
        return staticdefault;
    }

    public void setStaticdefault(String staticdefault) {
        this.staticdefault = staticdefault;
    }

    public String getAll() {
        return all;
    }

    public void setAll(String all) {
        this.all = all;
    }

    @java.lang.Override
    public java.lang.String toString() {
        return "MyConfig{" +
                "nodefault='" + nodefault + '\'' +
                ", eldefault='" + eldefault + '\'' +
                ", fielddefault='" + fielddefault + '\'' +
                ", staticdefault='" + staticdefault + '\'' +
                ", all='" + all + '\'' +
                '}';
    }
}

myConfig.toString() 会在没有配置时输出:

MyConfig{nodefault='', eldefault='el default', fielddefault='field default', staticdefault='from static data', all='from el default'}

你可以从以上选一个你想要的

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容