Springboot中如何通過yml為實體類注入屬性
延伸:以后除了可以為實體類注入屬性,還可以為配置類注入相關的配置信息
1.編寫實體類
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
}
@Component表示將當前類的創(chuàng)建工作交給Spring容器管理
@ConfigurationProperties(prefix = “person”)
用于表示該類需要讀取的配置信息,prefix用于指示讀取哪一個配置信息
Person類依賴了一個Dog類,如下:
public class Dog {
private String name;
private Integer age;
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
2.編寫yml文件
@ConfigurationProperties(prefix = “person”)
Person類的這個注解就會去找yml中對應的配置信息
person:
? lastName: zhangsan
? age: 18
? boss: false
? birth: 2017/12/12
? maps: {k1: v1,k2: v2}
? lists:
? ? - lisi
? ? - zhaoliu
? ? - wangwu
? dog:
? ? name: 小狗
? ? age: 23.測試
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootQuickStartApplicationTests {
? ? @Autowired
? ? Person person;
? ? @Test
? ? public void demo1() {
? ? ? ? System.out.println(person);
? ? }
}4.結果

注意:有可能中文在這個地方打印會出現亂碼,原因是yml的編碼和java文件的編碼不一樣導致,我們需要將其配成一致的編碼,如都設置成utf-8。
5.可以不用@ConfigurationProperties(prefix = “person”)注解方式
使用@Value的方式注入屬性值
@Value注解等價于:

以三個屬性字段為例
我們既可以從配置文件取值,也可以通過字面量直接賦值,當屬性值少的時候這種方式特別方便。
@Value("${person.lastName}")
private String lastName;
@Value("${person.age}")
private Integer age;
@Value("true")
private Boolean boss;
效果如下,由于只注入了三個屬性,其余屬性則為空

6.@ConfigurationProperties(prefix = “person”)
默認是從主配置文件中讀取相關信息,我們可以使用
@PropertySource(value = {“配置文件的路徑”})來指定需要讀取的配置文件
6.1寫一個dog.properties配置Dog類的相關配置信息
dog.name=puppy dog.age=24
6.2為Dog類注入屬性
@PropertySource(value = {"classpath:dog.properties"})
@Component
@ConfigurationProperties(prefix = "dog")
public class Dog {
private String name;
private Integer age;
6.3效果

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
很多人竟然不知道Java線程池的創(chuàng)建方式有7種
本文主要介紹了很多人竟然不知道Java線程池的創(chuàng)建方式有7種,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07
Java OpenCV圖像處理之仿射變換,透視變換,旋轉詳解
這篇文章主要為大家詳細介紹了Java OpenCV圖像處理中仿射變換,透視變換,旋轉的實現,文中的示例代碼講解詳細,快跟隨小編一起學習一下2022-10-10
Centos6.5下Jdk+Tomcat+Mysql環(huán)境安裝圖文教程
這篇文章主要為大家詳細介紹了Centos6.5系統(tǒng)下Jdk+Tomcat+Mysql環(huán)境安裝過程,感興趣的小伙伴們可以參考一下2016-05-05
LambdaQueryWrapper與QueryWrapper的使用方式
這篇文章主要介紹了LambdaQueryWrapper與QueryWrapper的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05

