private int[] testArray2;
@Value(“${test.array3}”)
private double[] testArray3;
这样就能够直接使用了,就是这么的简单方便,如果你想要支持不配置 key 程序也能正常运行的话,给它们加上默认值即可:
@Value(“${test.array1:}”)
private String[] testArray1;
@Value(“${test.array2:}”)
private int[] testArray2;
@Value(“${test.array3:}”)
private double[] testArray3;
仅仅多了一个 :
号,冒号后的值表示当 key 不存在时候使用的默认值,使用默认值时数组的 length = 0。
总结下使用数组实现的优缺点:
优点 :
-
不需要写配置类
-
使用逗号分割,一行配置,即可完成多个数值的注入,配置文件更加精简
缺点 :
- 业务代码中数组使用很少,基本需要将其转换为 List,去做 contains、foreach 等操作。
三、替代方法
==========
那么我们有没有办法,在解析 list、map 这些类型时,像数组一样方便呢?
答案是可以的,这就依赖于 EL
表达式。
3.1 解析 List
以使用 .yml
文件为例,我们只需要在配置文件中,跟配置数组一样去配置:
test:
list: aaa,bbb,ccc
在调用时,借助 EL
表达式的 split()
函数进行切分即可。
@Value(“#{‘${test.list}’.split(‘,’)}”)
private List testList;
同样,为它加上默认值,避免不配置这个 key 时候程序报错:
@Value(“#{‘${test.list:}’.split(‘,’)}”)
private List testList;
但是这样有个问题,当不配置该 key 值,默认值会为空串,它的 length = 1(不同于数组,length = 0),这样解析出来 list 的元素个数就不是空了。
这个问题比较严重,因为它会导致代码中的判空逻辑执行错误。这个问题也是可以解决的,在 split()
之前判断下是否为空即可。
@Value(“#{‘ t e s t . l i s t : ′ . e m p