ConfigurationProperties
是Spring Framework
的一个注解 用于将配置文件,环境变量中的值映射到一个Java
对象的属性上。
简单使用
user:
admin:
name: admin
password: 123456
age: 18
@Data
@Component
@ConfigurationProperties(prefix = "user.admin")
public class User {
private String name;
private String password;
private Integer age;
}
测试:
@SpringBootTest
class UserTest {
@Autowired
private User admin;
@Test
public void test(){
System.out.println(admin);
}
}
输出:可以看见他把属性按照名称已经注入到对象中去了。
类型转换
它还会额外绑我们坐下简单的 类型转换。
public class User {
// ...
// 将 Integer 修改为 String
private String age;
}
测试:age
也 18
级联属性
@Data
public class Profile {
private String account;
private String sex;
}
public class User {
// ...
// 增加一个 profile
private Profile profile;
}
user:
admin:
name: admin
password: 123456
age: 18
# 增加级联属性配置
profile:
account: adminAccount
sex: F
测试:
数组属性
public class User {
// ...
// 增加一个数组
private String[] alias;
}
user:
admin:
name: admin
password: 123456
age: 18
profile:
account: adminAccount
sex: F
alias:
- 管理员
- 超级管理员
- Admin
# 两种配置方式都可以
# alias[0]: 管理员
# alias[1]: 超级管理员
# alias[2]: Admin
什么时候赋的值呢?
public class User {
// ...
// 增加一个构造函数
public User() {
System.out.println("create user");
}
}
它是先创建对象(Spring
创建的因为有 @Component
),然后再赋值
与@Bean 结合使用
首先将 User.java
上的 @Component
与 @ConfigurationProperties
去掉
@Configuration
public class UserConfig {
@Bean
@ConfigurationProperties(prefix = "user.admin")
public User user(){
User user = new User();
user.setAge("19");
return user;
}
}
可以看出来在 @Bean
里面赋的值被覆盖了。就相当与它是在 return
后对返回的对象又对他进行了赋值