Spring 注解 @Value 快速使用指南
基本用法
// 注入字面常量值 |
三种注入方式
@Value 注解支持三种注入方式:实例属性、构造方法、setter 方法。
实例属性
|
构造方法
|
setter 方法
|
初级用法
private static void print(String name, Object value) { |
基本类型
|
demo-cfg: |
integerValue = 12345 |
注意:
对于基本类型,如果配置中相应的
key
不存在,那么
@Value
注解中必须要指定默认值,否则会报错;或者即使相应的
key
存在,但是对应的
value
没有设置或格式错误,也会报错。
|
包装类型
|
demo-cfg: |
integerWrapper = 12345 |
数组类型
|
demo-cfg: |
stringArray = [Big Bang Theory, Sheldon Cooper] |
注意:
数组元素类型也可以是包装类型。另外,数组类型配置的值默认是由逗号分隔符(英文半角)进行分隔,逗号分隔符前后可以有若干空白字符,不会影响解析。如果希望分隔符是其它符号,则需要用到高级用法中的
SpEL
,参见后面高级用法之
使用 Spring 表达式 SpEL
。
例外:
char[]
类型的数组,配置值不能是逗号分隔的如 “a, b, c” 这样的值,否则注入进来得到的
char[]
是一个长度为 7 的数组,其值为
['a', ',', ' ', 'b', ',', ' ', 'c']
,即中间的逗号和空格都被算作一个
char
注入
char[]
数组中了。对于包装类型数组
Character[]
和下面的
List
类型
List<Character>
, 其值仍然是用逗号分隔。
List类型
与数组类型类似,只是
List
类型的元素类型只支持包装类型,不支持基本类型。
|
demo-cfg: |
stringList = [Big Bang Theory, Sheldon Cooper] |
高级用法
使用 Spring 表达式 SpEL
// 非默认逗号分隔符 |
demo-cfg: |
shortListSpEL = [12345, 23456, 32767] |
利用 SpEL 注入 Map
|
demo-cfg: |
configMap = {host=192.168.88.168, port=3306, username=Sheldon, password=Cooper} |
注意:
YAML 配置中
map
类型的值必须是
JSON
格式的字符串(最外层的引号为单引号或双引号都可以,外层为单引号,则
JSON
内部用双引号,反之亦然)。