使用@Value注解装配Bean对象
properties配置文件(application.properties):
student.name=Betty
student.age=20
student.email=123456@qq.com
JavaBean对象(Student.java):
@Component
public class Student {
@Value("${student.name}")
private String name;
@Value("${student.age}")
private int age;
@Value("${student.email}")
private String email;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
}
@Value与@ConfigurationProperties的区别
@ConfigurationProperties | @Value | |
---|---|---|
注入方式上 | 批量注入配置文件中的属性 | 在属性上 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL语法 | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
问题1:何为松散绑定?
用下划线(_)或短横线(-)表示驼峰式。
例如:
student.alstName等价于person.last-name等价于person.last_name
问题2:@Value与@ConfigurationProperties的适用场景
yum配置文件与properties配置文件都支持这两种注解,但由于它们的不同,所以在使用时有所侧重:
- 如果只是在某个业务逻辑中需要获取配置文件中的某项值(简单类型),使用@Value
@RestController
public class HelloController {
@Value("${student.last_name}")
private String lastName;
@RequestMapping("/sayHello")
public String sayHello(){
return "hello,"+lastName;
}
}
xml配置文件中的内容
student.last_name=Betty
- 如果我们专门编写了一个javaBean来和配置文件进行映射,建议直接使用@ConfigurationProperties
配置文件注入属性值数据校验
@Component
@ConfigurationProperties(prefix = "student")
@PropertySource(value = "classpath:application.properties")
@Validated //进行数据校验
public class Student {
private String lastName;
private int age;
@Email
private String email;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Student{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
}