在后端的开发中,只要是运用spring或者springboot,那么基本上就离不开@Value
和@ConfigurationProperties
这两个注解,他们都是用来给咱们特点赋值的,@Value
是给单个特点赋值,@ConfigurationProperties
是给多个特点赋值。简略的特点赋值就不说了,今天来看下,关于数组,调集,Map类型的特点,该要怎么赋值。
1. @Value 注入数组
@Component
public class Person {
@Value("${person.hobbies}")
private String[] hobbies;
}
装备文件:
person:
#注意:要用逗号分隔,假如用其他符号分隔就会被识别为一个元素。
hobbies: basketball,football,swimming #注意:在nacos装备时逗号前后不要有空格
2. @Value 注入调集
@Component
public class Person {
@Value("${person.hobbies}")
private Collection<String> hobbies;
}
装备文件:
#和数组的写法一样,同样也要用逗号分隔。假如用其他分隔符,能够凭借SPEL来解析
person:
hobbies: basketball,football,swimming,signing
#这种写法@Value不能解析,@ConfigurationProperties注解能够
person:
hobbies:
- basketball
- football
- swimming
假如将分隔符换成#,那么需要凭借SPEL来解析成数组或者调集。
@Component
public class Person {
@Value("#{'${person.hobbies}'.split('#')}")
private String[] hobbies2;
@Value("#{'${person.hobbies}'.split('#')}")
private Collection<String> hobbies;
}
3. @Value 注入Map
@Component
public class Person {
//凭借SPEL表达式
@Value("#{${person.courses}}")
Map<String, String> courses;
}
装备文件:
person:
#JSON写法
courses: "{english: 'A', math: 'B', physics: '不合格'}"
#这种格式@Value无法解析,@ConfigurationProperties注解能够
person:
courses:
english: 'A'
math: 'B'
physics: '不合格'
趁便提一下,@Value 注入假如找不到对应的装备,则会报错,假如不想报错,能够给一个默认值,用:分隔。
//默认值是zhangsan
@Value("${person.name:zhangsan}")
private String name;
//默认值是空串""
@Value("${person.name:}")
private String name;
4. @ConfigurationProperties注入数组
@Data
@ConfigurationProperties(prefix = "person")
@Component
public class Person {
private String[] nickNames;
}
装备文件:
person:
nick-names: #用nickeNames也能够,支撑松懈绑定
- 阿呆
- 吴彦祖
#还能够行内写法:
person:
nick-names: [阿呆,彦祖,冠希]
5. @ConfigurationProperties注入调集
和注入数组是如出一辙的。
6. @ConfigurationProperties注入Map
@Data
@ConfigurationProperties(prefix = "person")
@Component
public class Person {
private Map<String, String> courses;
}
装备文件:
person:
courses:
english: '及格'
math: '优异'
chinese: '满分'
#还能够行内写法
person:
#@Value注入Map时和这个很像,可是@Value需要用引号括起来,可是这儿不能括起来
courses: { english: 及格, math: 优异, chinese: 满分2 }
汇总一下:
@Data
@ConfigurationProperties(prefix = "person")
@Component
public class Person implements InitializingBean {
//数组
private String[] nickNames;
//调集
private Collection<String> hobbies;
//Map
private Map<String, String> courses;
//其他类
private Car car;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("nickNames = " + Arrays.toString(nickNames));
System.out.println("hobbies = " + hobbies);
System.out.println("courses = " + courses);
System.out.println("car = " + car);
}
}
装备文件:
person:
nick-names:
- 阿呆
- 吴彦祖
hobbies: [basketball, football, swimming]
courses:
english: '及格'
math: '优异'
chinese: '满分'
car:
brand: 奥迪
price: 300000.00
简略看下@Value
和@ConfigurationProperties
注解的差异
@ConfigurationProperties |
@Value |
|
---|---|---|
特点 | 批量注入装备文件中的特点 | 单个指定 |
SPEL功用 |
不支撑 | 支撑 |
松懈绑定 |
支撑 | 不支撑 |
杂乱类型封装 |
支撑 | 不支撑 |
JSR303校验 |
支撑 | 不支撑 |
好了,关于@Value
和@ConfigurationProperties
注解注入杂乱类型的特点就介绍到这儿吧,欢迎我们弥补。