Save Load
GitHub 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

Spring 注解

Spring 注解

@Value

注入 String

yml

populate:
  string: stringValue

注入

    @Value("${populate.string2:}")	// 默认值是空字符串“”
    private String stringV;
    
    @Value("${populate.string:null}")	// 默认值是null
    private String stringV2;
    
    @Value("${populate.string:defaultValue}")	// 默认值是“defaultValue”
    private String stringV3;
    
	@Value("#{'${allowNameRepetitionPlatformCode:0}'.split(',')}")
	private List<String> allowNameRepetitionPlatformCode;
	private List<Long> allowNameRepetitionPlatformCode;
	// 在 yml 文件未对 allowNameRepetitionPlatformCode 配置时,allowNameRepetitionPlatformCode 属性加载默认值,[0], 在 yml 做了相应配置时,属性值为 配置结果,不加载默认值。

注入 Array

yml

populate:
  array: array1,array2,array3

注入

   @Value("${populate.array:}") // 默认值是[]
    private String[] array;
    
    @Value("${populate.array:a1,a2,a3}") // 默认值是[a1,a2,a3]
    private String[] array1;

注入 List

yml

populate:
  list: list1,list2,list3

注入

  • #{’${populate.list:}’.split(’,’)}: #{} 内是SpEL表达式,使用 split 函数指定了分隔符;
  • ${populate.list}:不指定分隔符则会默认以, 作为分隔符。(可能较低版本的Spring不支持,未验证)
     @Value("${populate.list:}")  // 默认值是空List,{}
    private List<String> list0;

    @Value("#{'${populate.list:}'.split(',')}") // 默认值是包含一个空字符串的List {“”}
    private List<String> list1;

    @Value("${populate.list:l1,l2,l3}")  // 默认值是{l1,l2,l3}
    private List<String> list2;
    
    @Value("#{'${populate.list:l1,l2,l3}'.split(',')}") // 默认值是{l1,l2,l3}
    private List<String> list3;
    
    @Value("#{'${populate.list:,}'.split(',')}") // 默认值是空List,{}
    private List<String> list4;

注入 Map

yml

  • key可以但不必被单引号包围
  • value必须被单引号包围
populate:
  map: "{
         'key1': 'value1',
         'key2': 'value2',
         'key3': 'value3'
         }"
         
  mapList: "{
          key1: 'v11,v12',
          key2: 'v21,v22',
          key3: 'v31,v32'
         }"

注入

   @Value("#{${populate.map:{}}}")		// 默认值是null
   private Map<String,String> map;

   @Value("#{${populate.map:null}}}")  // 默认值是null
   private Map<String, String> map2;
   
   @Value("#{${populate.map:{k1:'v1',k2:'v2'}}}")  // 默认值是{"k1":"v1","k2":"v2"}
   private Map<String, String> map3;


   
   @Value("#{${populate.mapList:{}}}")		// 值为{"key1":["v11","v12"],"key2":["v21","v22"],"key3":["v31","v32"]}
   private Map<String,List<String>> mapList; 

${} 与

  • #{…} 主要用于加载外部属性文件中的值
  • ${…} 用于执行SpEl表达式,并将内容赋值给属性
  • #{…} 和 $ {…} 可以混合使用,但是必须#{}外面,${}在里面

注入 静态变量

  • spring 不允许/不支持把值注入到静态变量中
  • 在spring支持set方法注入,我们可以利用非静态setter 方法注入静态变量。

注入

   @Value("#{${populate.map:{}}}")		// 默认值是null
private static String CLUSTER_NAME;

@Value("${ES.CLUSTER_NAME}")
public void setClusterName(String clusterName) {
CLUSTER_NAME = clusterName;
}