Springboot中如何通過yml為實體類注入屬性
延伸:以后除了可以為實體類注入屬性,還可以為配置類注入相關(guān)的配置信息
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
表示將當(dāng)前類的創(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中對應(yīng)的配置信息
person: ? lastName: zhangsan ? age: 18 ? boss: false ? birth: 2017/12/12 ? maps: {k1: v1,k2: v2} ? lists: ? ? - lisi ? ? - zhaoliu ? ? - wangwu ? dog: ? ? name: 小狗 ? ? age: 2
3.測試
@RunWith(SpringRunner.class) @SpringBootTest public class SpringbootQuickStartApplicationTests { ? ? @Autowired ? ? Person person; ? ? @Test ? ? public void demo1() { ? ? ? ? System.out.println(person); ? ? } }
4.結(jié)果
注意:有可能中文在這個地方打印會出現(xiàn)亂碼,原因是yml的編碼和java文件的編碼不一樣導(dǎo)致,我們需要將其配成一致的編碼,如都設(shè)置成utf-8。
5.可以不用@ConfigurationProperties(prefix = “person”)注解方式
使用@Value的方式注入屬性值
@Value注解等價于:
以三個屬性字段為例
我們既可以從配置文件取值,也可以通過字面量直接賦值,當(dāng)屬性值少的時候這種方式特別方便。
@Value("${person.lastName}") private String lastName; @Value("${person.age}") private Integer age; @Value("true") private Boolean boss;
效果如下,由于只注入了三個屬性,其余屬性則為空
6.@ConfigurationProperties(prefix = “person”)
默認(rèn)是從主配置文件中讀取相關(guān)信息,我們可以使用
@PropertySource(value = {“配置文件的路徑”})
來指定需要讀取的配置文件
6.1寫一個dog.properties配置Dog類的相關(guān)配置信息
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效果
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
很多人竟然不知道Java線程池的創(chuàng)建方式有7種
本文主要介紹了很多人竟然不知道Java線程池的創(chuàng)建方式有7種,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07Java OpenCV圖像處理之仿射變換,透視變換,旋轉(zhuǎn)詳解
這篇文章主要為大家詳細(xì)介紹了Java OpenCV圖像處理中仿射變換,透視變換,旋轉(zhuǎn)的實現(xiàn),文中的示例代碼講解詳細(xì),快跟隨小編一起學(xué)習(xí)一下2022-10-10Centos6.5下Jdk+Tomcat+Mysql環(huán)境安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了Centos6.5系統(tǒng)下Jdk+Tomcat+Mysql環(huán)境安裝過程,感興趣的小伙伴們可以參考一下2016-05-05LambdaQueryWrapper與QueryWrapper的使用方式
這篇文章主要介紹了LambdaQueryWrapper與QueryWrapper的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05Java后端WebSocket的Tomcat實現(xiàn)
這篇文章主要介紹了Java后端WebSocket的Tomcat實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06