SpringBoot如何配置文件給bean賦值問題
方式一、使用yaml文件對(duì)bean進(jìn)行注入
案例
(先來兩個(gè)實(shí)體類做為案例測(cè)試用)
- Car類
@Component public class Car { String name; String pinpai; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPinpai() { return pinpai; } public void setPinpai(String pinpai) { this.pinpai = pinpai; } public Car(String name, String pinpai) { this.name = name; this.pinpai = pinpai; } public Car() { } @Override public String toString() { return "Car{" + "name='" + name + '\'' + ", pinpai='" + pinpai + '\'' + '}'; } }
- Person類
//此注解通過application.yaml里的person來注入?yún)?shù) @ConfigurationProperties(prefix = "person")
@Component @ConfigurationProperties(prefix = "person") //通過application.yaml里的person來注入?yún)?shù) public class Person { String name; String age; String idcard; Map map; List list; Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getIdcard() { return idcard; } public void setIdcard(String idcard) { this.idcard = idcard; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } public List getList() { return list; } public void setList(List list) { this.list = list; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } public Person(String name, String age, String idcard, Map map, List list, Car car) { this.name = name; this.age = age; this.idcard = idcard; this.map = map; this.list = list; this.car = car; } public Person() { } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", idcard='" + idcard + '\'' + ", map=" + map + ", list=" + list + ", car=" + car + '}'; } }
application.yaml里的代碼:
(注意一點(diǎn)的是yaml文件必須以application命名才能被springboot識(shí)別)
person: name: zhangsan age: 20 idcard: 342115454 map: {key: 1,key2: 2} list: - java - html - js - css car: name: 21款小奔奔 pinpai: 國(guó)產(chǎn)汽車
- yaml配置文件嚴(yán)格遵守層級(jí)關(guān)系,以及冒號(hào)后需要有一個(gè)空格
- yaml文件中對(duì)于Map類型的賦值,最為方便的則是{key: value}形式
- List類型的賦值 則是可以通過(- 值)的方式類賦值 也可以通過list: [值1,值2,值3]的方式,根據(jù)個(gè)人喜好選擇
- yaml文件中的key名必須和封裝的實(shí)體類對(duì)象的屬性名一致,否則無法注入
測(cè)試輸出的信息為:
person{ name='zhangsan', age='20', idcard='342115454', map={key=1, key2=2}, list=[java, html, js, css], car=Car{name='21款小奔奔', pinpai='國(guó)產(chǎn)汽車'} }
甚至還能玩的更花樣一點(diǎn):
person: name: zhangsan #在20后面加上隨機(jī)的int整數(shù) age: 20${random.int} #隨機(jī)生成的long的整數(shù) idcard: ${random.long} map: {key: 1,key2: 2} check: 大奔奔汽車 list: - java - html - js - css car: name: 21款小奔奔 #判斷person中的key名為check的值是否存在,如果存在則注入person.check的值,不存在則注入小奔奔汽車 pinpai: ${person.check:小奔奔汽車}
方式二、使用自定義配置文件對(duì)bean進(jìn)行注入
案例
(還是先來兩個(gè)實(shí)體類做為案例測(cè)試用)
- Car類
@Component public class Car1 { String name; String pinpai; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPinpai() { return pinpai; } public void setPinpai(String pinpai) { this.pinpai = pinpai; } public Car1(String name, String pinpai) { this.name = name; this.pinpai = pinpai; } public Car1() { } @Override public String toString() { return "Car{" + "name='" + name + '\'' + ", pinpai='" + pinpai + '\'' + '}'; } }
- Person類:
//javaConfig 綁定配置文件的值 //加載指定路徑的配置文件 myconfig.properties @PropertySource(value = "classpath:myconfig.properties")
再通過@Value("${key名}")來注入 ,key名則是配置文件中的key
@Component //javaConfig 綁定配置文件的值 //加載指定配置文件 @PropertySource(value = "classpath:myconfig.properties") public class Person1 { //SPEL表達(dá)式取出值 @Value("${name}") String name; String age; String idcard; Map map; List list; Car1 car1; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getIdcard() { return idcard; } public void setIdcard(String idcard) { this.idcard = idcard; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } public List getList() { return list; } public void setList(List list) { this.list = list; } public Car1 getCar() { return car1; } public void setCar(Car1 car1) { this.car1 = car1; } public Person1(String name, String age, String idcard, Map map, List list, Car1 car1) { this.name = name; this.age = age; this.idcard = idcard; this.map = map; this.list = list; this.car1 = car1; } public Person1() { } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", idcard='" + idcard + '\'' + ", map=" + map + ", list=" + list + ", car=" + car1 + '}'; } }
自定義配置文件myconfig.properties的代碼:
只做其中兩個(gè)參數(shù)的案例
name=zhangsan age=22
測(cè)試輸出的信息為:
Person{name='zhangsan', age='22', idcard='null', map=null, list=null, car=null}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis的foreach標(biāo)簽語法報(bào)錯(cuò)的解決
這篇文章主要介紹了mybatis的foreach標(biāo)簽語法報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Spring Boot 項(xiàng)目做性能監(jiān)控的操作流程
這篇文章主要介紹了Spring Boot 項(xiàng)目如何做性能監(jiān)控,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Java數(shù)據(jù)結(jié)構(gòu)常見幾大排序梳理
Java常見的排序算法有:直接插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序等。本文詳解介紹它們的實(shí)現(xiàn)以及圖解,需要的可以參考一下2022-03-03解決IDEA中Maven項(xiàng)目中JSTL標(biāo)簽無效問題
這篇文章主要介紹了關(guān)于IDEA中Maven項(xiàng)目中JSTL標(biāo)簽無效問題的解決方法,需要的朋友可以參考下2018-09-09