该注解主要是用来给bean的属性赋值,与@Value有异曲同工之妙,不过@Value只能赋值一个,而 @ConfigurationProperties可以一次性赋值多个。根据bean的属性名称跟配置文件里的名称一一对应映射。
例子1:我们可以直接在对应的bean上加 如
存在User类
@ConfigurationProperties("user")
public class User {
public User() {
// TODO Auto-generated constructor stub
System.out.println("create a user");
}
private Long id;
private String username;
private String name;
private Short age;
private BigDecimal balance;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Short getAge() {
return this.age;
}
public void setAge(Short age) {
this.age = age;
}
public BigDecimal getBalance() {
return this.balance;
}
public void setBalance(BigDecimal balance) {
this.balance = balance;
}
}
application.yml 增加如下配置
user:
name: whj
id: 1222
启动类
@SpringBootApplication
@EnableEurekaClient
@Import(User.class)
public class MicroserviceSimpleConsumerMovieApplication {
public static void main(String[] args) {
SpringApplication.run(MicroserviceSimpleConsumerMovieApplication.class, args);
}
}
@RestController
public class MovieController {
@Autowired
private User user;
@GetMapping("/movie/{id}")
public User findById(@PathVariable Long id) {
System.out.println(user.getName());
return user;
}
}
执行http://localhost:7902/movie/1 打断点(记得换成你自己的ip)我们可以看到MovieController 下注入的user的id=1222 name=whj,
这里就可以看出@ConfigurationProperties(“user”)的作用了:
寻找配置文件application.yml user 节点下配置的值与bean对象中的属性名一一映射对应,并将配置的值set到与之名称对应的属性中去.
我们换一种写法不使用import注解来生产bean
标题
@SpringBootApplication
@EnableEurekaClient
// @Import(User.class)
public class MicroserviceSimpleConsumerMovieApplication {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public User user() {
User user = new User();
user.setName("wwwwwwwwwwwwwwwww");
return user;
}
public static void main(String[] args) {
SpringApplication.run(MicroserviceSimpleConsumerMovieApplication.class, args);
}
}
这时候在执行对应的contorller方法 发现控制台还是打印whj,由此可以见在注入bean的时候 才会赋值配置文件的值,所以在spring容器生成bean时设置的属性值会被覆盖。