上一篇:04-Springboot属性绑定:yum文件和Properties类的属性绑定https://blog.csdn.net/fsjwin/article/details/109699991
上一篇说了属性绑定,但是在springboot底层使用更多的还是构造器绑定:
1.YmlProperties.java
package com.yuhl;
import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author yuhl
* @Date 2020/11/14 10:19
* @Classname YmlProperties
* @Description yml测试 Properties类
*/
@Data
@ToString
@ConstructorBinding //构造器绑定 和 @Component 只能有一个
@ConfigurationProperties(prefix = "yml") //从配置文件中读取数据的开图字符
public class YmlProperties {
private String str;
private String specialStr;
private Integer num;
private Double dnum;
private Date birth;
private List list;
private Set set;
private Map map;
private List<User> users;
}
2. yml文件
yml:
str: 普通字符串
specialStr: "换\n行字符串"
num: 520
dnum: 520:22
birth: 2020/11/11 11:11:11
list:
- 大鸟
- 小鸟
- 中鸟
set:
- set1
- set2
- set3
#set: [set3,set5,set6]
map: {k1: v1, k2: v2}
users:
- name: yuhl
age: 20
- name: rll
age: 18
ymlother:
str: 普通字符串
specialStr: "换\n行字符串"
num: 520
dnum: 520:22
birth: 2020/11/11 11:11:11
list:
- 大鸟
- 小鸟
- 中鸟
set:
- set1
- set2
- set3
#set: [set3,set5,set6]
map: {k1: v1, k2: v2}
users:
- name: yuhl
age: 20
- name: rll
age: 18
validata:
num: 100
3.控制器HelloController
package com.yuhl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author yuhl
* @Date 2020/11/14 8:54
* @Classname controller
* @Description TODO
*/
@RestController
@EnableConfigurationProperties(YmlProperties.class)
public class HelloController {
//注入
@Autowired
YmlProperties ymlProperties;
@RequestMapping("/yml")
public YmlProperties yml() {
System.out.println("properties:" +ymlProperties);
return ymlProperties;
}
}
4.测试
5.属性注入变形
- 在属性绑定的案例中我们同样也可以使用@EnableConfigurationProperties,此时不需要提供@Component。
- 如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。
- 而如果使用@EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了启用注入
- 这样的话Properiteis文件上就可以不用@Component了。只需要在使用它的类上写上@EnableConfigurationProperties(YmlProperties.class)
即可。
下一篇:06-Springboo第三方组件注入:yum文件和@Bean的第三方组件注入https://blog.csdn.net/fsjwin/article/details/109706247