spring boot @ConfigurationProperties用法解析

该注解主要是用来给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时设置的属性值会被覆盖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值