视频地址:https://www.bilibili.com/video/BV1oW41167AV
对应代码Git库地址:https://github.com/whh306318848/spring-annotation.git
- 使用@Value注解对Bean的属性进行赋值:
1.1. 使用基本数值进行赋值
1.2. 可以使用Spring表达式SpEL(即#{})进行赋值
1.3. 可以使用${}读取配置文件或环境变量中的值 - 如果是使用xml配置文件为Bean赋值的方式,在xml文件中引用外部配置文件需要先在配置文件中加入”context”名字空间,然后使用”context:property-placeholder”标签的location属性指定要导入的外部配置文件
<context:property-placeholder location="classpath:person.properties" />
- 使用注解方式的过程与使用xml配置文件类似
3.1. 首先,需要在配置类上通过@PropertySource注解导入配置文件,该注解的value属性用于指定配置文件的路径,是一个String数组,可以从类路径(classpath)开始,也可以从文件路径(file)开始
3.2. 然后,在Bean类中使用${}读取配置文件中的值
// 使用@PropertySource读取外部配置文件中的key/value保存到运行的环境变量中,加载完外部的配置文件以后,使用${}去除配置文件的值
@PropertySource(value = {"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValues {
@Bean
public Person person() {
return new Person();
}
}
public class Person {
// 使用@Value赋值:
// 1、基本数值
// 2、可以写Spring表达式SpEL:#{}
// 3、可以使用{}取配置文件【.properties】中的值(在运行环境变量中的值)
@Value("张三")
private String name;
@Value("#{20-2}")
private Integer age;
@Value("{person.nickName}")
private String nickName;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", nickName='" + nickName + '\'' +
'}';
}
}
3.3。 @PropertySource注解的作用是读取外部配置文件中的key/value保存到运行的环境变量中,所以除了在Bean类中使用${}读取配置文件的值之外,还可以使用ConfigurableEnvironment的getProperty方法读取
ConfigurableEnvironment environment = applicationContext.getEnvironment();
String property = environment.getProperty("person.nickName");
System.out.println(property);
- @PropertySource注解是一个可重复组件,如果需要引入多个配置文件,有两种方法,分别是:
4.1. 使用@PropertySource注解,在其value属性中填入配置文件路径数组;
4.2. 使用@PropertySources注解,其值是@PropertySource数组