@Value的值有两类:
1、${ property : default_value }
2、#{ obj.property? :default_value }
第一个注入的是外部配置文件对应的property,第二个则是SpEL表达式对应的内容。 default_value是前面的值为空时的默认值。注意二者的不同,#{}里面那个obj代表对象。
第一种方式:${}
1、新建properties文件
![d7ba3768c593e6a8f498510514fba644.png](https://i-blog.csdnimg.cn/blog_migrate/98f28302f1879af9799cf0b44e4cbcc8.png)
2、使用Value注解读取属性文件值
public class Person {
private String name;
public String getName() {
return name;
}
@Value("${person.name}")
public void setName(String name) {
this.name = name;
}
}
3、配置加载Person类
@Configuration
// 加载属性文件
@PropertySource(value = {"classpath:application.properties"})
public class MainConfig {
@Bean
public Person person() {
return new Person();
}
}
测试类:
public class MainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
Person person = (Person) context.getBean("person");
System.out.println("name : " + person.getName());
// 读取属性文件
Environment environment = context.getEnvironment();
System.out.println(environment.getProperty("person.name"));
}
}
结果如:
name : "张三"
"张三"
第二种方式:#{}
在Person属性赋值使用#{}
public class Person {
@Value("#{car.name}")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
定义Car对象
public class Car {
@Value("${car.name}")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
配置类:
@Configuration
// 加载属性文件
@PropertySource(value = {"classpath:application.properties"})
public class MainConfig {
@Bean
public Person person() {
return new Person();
}
@Bean
public Car car() {
return new Car();
}
}
测试类:
public class MainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
Person person = (Person) context.getBean("person");
System.out.println("person-name : " + person.getName());
Car car = (Car) context.getBean("car");
System.out.println("car-name : " + car.getName());
// 读取属性文件
Environment environment = context.getEnvironment();
System.out.println("env: " + environment.getProperty("person.name") + ", " + environment.getProperty("car.name"));
}
}
结果:
person-name : "奥迪"
car-name : "奥迪"
env: "张三", "奥迪"