三种方式:@Value、Environment、@ConfigurationProperties
@Value
HelloController:
@Value("${name}")
private String name;
@Value("${person.name}")
private String pname;
@Value("${person.age}")
private int age;
@Value("${address[0]}")
private String address;
@Value("${address2[1]}")
private String address2;
@Value("${msg1}")
private String msg1;
@Value("${msg2}")
private String msg2;
application.yml:
name: abc
#对象
person:
name: ${name}
age: 20
#对象行内写法
person2: {name: Qiddo,age: 20}
#数组
address:
- suqian
- taizhou
#数组行内写法
address2: [suqian,taizhou]
#纯量
msg1: 'hello \n world' #不识别转义字符
msg2: "hello \n world" #识别转义字符
结果:
优缺点:
对于只有一个属性的对象,使用起来方便,但多个属性的对象就要重复value去注入属性值了
所以下面引入了@Autowired的方法,采用Environment的方式获取对象属性值读取配置内容。
Environment
HelloController:
@Autowired
private Environment env;
System.out.println(env.getProperty("person.name"));
System.out.println(env.getProperty("address[0]"));
通过getProperty的方法就能读取配置内容了
优缺点:
相对于@Value,就不需要重复去写多个Value来读取配置内容,对于多个属性的对象来讲方便很多
@ConfigurationProperties
引入下面的依赖,在编写application.yml时会有提示
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
HelloController:
@Autowired
private Person per;
System.out.println(per);
Person类
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
}
这边省去getter、setter和tostring
功能
读取一个类的对象的配置内容