// 注入字面常量值
@Value("This is a literal string value")
private String literalStringValue;

// 注入配置文件中的值
@Value("${demo-cfg.basic.string}")
private String stringValue;

// 指定默认值,如果配置文件中找不到相应的 key,则使用默认值
@Value("${demo-cfg.basic.string:defaultValue}")
private String stringValueWithDefaultValue;

// 指定默认值为空字符串(即长度为 0 的字符串)
@Value("${demo-cfg.basic.string:}")
private String stringValueWithDefaultEmptyString;

@Value("${demo-cfg.basic.string}")
private String stringValue;

@Component
public class DemoComponent {
private String stringValue;

@Autowired
public DemoComponent(@Value("${demo-cfg.basic.string}") String stringValue) {
this.stringValue = stringValue;
}
}

@Component
public class DemoComponent {
private String stringValue;

@Autowired
public void setStringValue(@Value("${demo-cfg.basic.string}") String stringValue) {
this.stringValue = stringValue;
}
}

private static void print(String name, Object value) {
// 此处将 byte[] 数组中的 byte 转换成 int 类型后再打印,避免打印出的是乱码字符
if (value instanceof byte[]) {
byte[] byteArray = (byte[]) value;
int[] tempIntArray = new int[byteArray.length];
for (int i = 0; i < byteArray.length; i++) {
tempIntArray[i] = byteArray[i];
}
value = tempIntArray;
}
System.out.println(StrUtil.format("{} = {}",
StrUtil.padAfter(name, 12, StrUtil.C_SPACE), value));
}

@Value("${demo-cfg.basic.integer}")




    

private int integerValue;

@Value("${demo-cfg.basic.integerHex}")
private int integerHex;

@Value("${demo-cfg.basic.integerOct}")
private int integerOct;

@Value("${demo-cfg.basic.integerBin}")
private int integerBin;

@Value("${demo-cfg.basic.long}")
private long longValue;

@Value("${demo-cfg.basic.float}")
private float floatValue;

@Value("${demo-cfg.basic.double}")
private double doubleValue;

@Value("${demo-cfg.basic.char}")
private char charValue;

@Value("${demo-cfg.basic.byte}")
private byte byteValue;

@Value("${demo-cfg.basic.short}")
private short shortValue;

@Value("${demo-cfg.basic.boolean}")
private boolean booleanValue;
demo-cfg:
basic:
integer: 12345
integerHex: 0xABCDE # 十六进制整数
integerOct: 012345 # 八进制整数
integerBin: 0b11001100 # 二进制整数
long: 0xCAFEBABE # 十六进制整数
float: 123.456
double: 12.3456789
char: a
byte: 68
short: 12345
boolean: true
integerValue = 12345
integerHex = 703710
integerOct = 5349
integerBin = 204
longValue = 3405691582
floatValue = 123.456
doubleValue = 12.3456789
charValue = a
byteValue = 68
shortValue = 12345
booleanValue = true

@Value("${demo-cfg.basic.integer:16888}")
private int integerValue;

@Value("${demo-cfg.basic.float:1.23}")
private float floatValue;

@Value("${demo-cfg.basic.boolean:true}")
private boolean booleanValue;

@Value("${demo-cfg.basic.integer}")




    

private Integer integerWrapper;

@Value("${demo-cfg.basic.long}")
private Long longWrapper;

@Value("${demo-cfg.basic.float}")
private Float floatWrapper;

@Value("${demo-cfg.basic.double}")
private Double doubleWrapper;

@Value("${demo-cfg.basic.char}")
private Character charWrapper;

@Value("${demo-cfg.basic.byte}")
private Byte byteWrapper;

@Value("${demo-cfg.basic.short}")
private Short shortWrapper;

@Value("${demo-cfg.basic.boolean}")
private Boolean booleanWrapper;
demo-cfg:
basic:
integer: 12345
long: 0xCAFEBABE # 十六进制整数
float: 123.456
double: 12.3456789
char: a
byte: 68
short: 12345
boolean: true
integerWrapper = 12345
longWrapper = 3405691582
floatWrapper = 123.456
doubleWrapper = 12.3456789
charWrapper = a
byteWrapper = 68
shortWrapper = 12345
booleanWrapper = true

@Value("${demo-cfg.advanced.array.string}")
private String[] stringArray;

@Value("${demo-cfg.advanced.array.integer}")
private int[] integerArray;

@Value("${demo-cfg.advanced.array.long}")
private long[] longArray;

@Value("${demo-cfg.advanced.array.float}")
private float[] floatArray;

@Value("${demo-cfg.advanced.array.double}")
private double[] doubleArray;

@Value("${demo-cfg.advanced.array.char}")
private char[] charArray;

@Value("${demo-cfg.advanced.array.byte}")
private byte[] byteArray;

@Value("${demo-cfg.advanced.array.short}")
private short[] shortArray;

@Value("${demo-cfg.advanced.array.boolean}")
private boolean[] booleanArray;
demo-cfg:




    

advanced:
array:
string: Big Bang Theory, Sheldon Cooper
integer: 1234, 56789
long: 0xCAFEBABE, 0xDEADBEEF
float: 1.2, 3.45, 6.789
double: 1.23456789, 2.3456789, 3.45678912345
char: abc
byte: -12, 67, 89
short: 12345, 23456, 32767
boolean: true, false, true
stringArray  = [Big Bang Theory, Sheldon Cooper]
integerArray = [1234, 56789]
longArray = [3405691582, 3735928559]
floatArray = [1.2, 3.45, 6.789]
doubleArray = [1.23456789, 2.3456789, 3.45678912345]
charArray = [a, b, c]
byteArray = [-12, 67, 89]
shortArray = [12345, 23456, 32767]
booleanArray = [true, false, true]

@Value("${demo-cfg.advanced.array.string}")
private List<String> stringList;

@Value("${demo-cfg.advanced.array.integer}")
private List<Integer> integerList;

@Value("${demo-cfg.advanced.array.long}")
private List<Long> longList;

@Value("${demo-cfg.advanced.array.float}")
private List<Float> floatList;

@Value("${demo-cfg.advanced.array.double}")
private List<Double> doubleList;

@Value("${demo-cfg.advanced.array.char}")
private List<Character> charList;

@Value("${demo-cfg.advanced.array.byte}")
private List<Byte> byteList;

@Value("${demo-cfg.advanced.array.short}")
private List<Short> shortList;

@Value("${demo-cfg.advanced.array.boolean}")
private List<Boolean> booleanList;
demo-cfg:
advanced:
array:
string: Big Bang Theory, Sheldon Cooper
integer: 1234, 56789
long: 0xCAFEBABE, 0xDEADBEEF
float: 1.2, 3.45, 6.789
double: 1.23456789, 2.3456789, 3.45678912345
char: a, b, c
byte: -12, 67, 89
short: 12345, 23456, 32767
boolean: true, false, true
stringList   = [Big Bang Theory, Sheldon Cooper]
integerList = [1234, 56789]
longList = [3405691582, 3735928559]
floatList = [1.2, 3.45, 6.789]
doubleList = [1.23456789, 2.3456789, 3.45678912345]
charList = [a, b, c]
byteList = [-12, 67, 89]
shortList = [12345, 23456, 32767]
booleanList = [true, false, true]

// 非默认逗号分隔符
// 通过 SpEL 表达式对配置字符串值进行 split 操作
// split 方法的参数为正则表达式 \s*__\s*
@Value("#{'${demo-cfg.advanced.spel.short}'.split('\\s*__\\s*')}")
private List<Short> shortListSpEL;

// 还可以直接注入某个系统属性的值
// 如果该系统属性没有被定义,则最终 priority 的值为 null
@Value("#{systemProperties['priority']}")
private Integer priority;

// SpEL 表达式也可以指定系统属性未定义时的默认值
@Value("#{systemProperties['priority'] ?: '123'}")
private Integer priorityWithDefault;
demo-cfg:
advanced:
spel:
short: 12345 __ 23456 __ 32767
shortListSpEL       = [12345, 23456, 32767]
priority = null
priorityWithDefault = 123

@Value("#{${demo-cfg.advanced.spel.map}}")




    

private Map<String, String> configMap;
demo-cfg:
advanced:
spel:
map: '{
host: "192.168.88.168",
port: "3306",
username: "Sheldon",
password: "Cooper"
}'
configMap = {host=192.168.88.168, port=3306, username=Sheldon, password=Cooper}