SpringBoot如何配置文件給bean賦值問題
方式一、使用yaml文件對bean進(jìn)行注入
案例
(先來兩個(gè)實(shí)體類做為案例測試用)
- 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識別)
person:
name: zhangsan
age: 20
idcard: 342115454
map: {key: 1,key2: 2}
list:
- java
- html
- js
- css
car:
name: 21款小奔奔
pinpai: 國產(chǎn)汽車- yaml配置文件嚴(yán)格遵守層級關(guān)系,以及冒號后需要有一個(gè)空格
- yaml文件中對于Map類型的賦值,最為方便的則是{key: value}形式
- List類型的賦值 則是可以通過(- 值)的方式類賦值 也可以通過list: [值1,值2,值3]的方式,根據(jù)個(gè)人喜好選擇
- yaml文件中的key名必須和封裝的實(shí)體類對象的屬性名一致,否則無法注入
測試輸出的信息為:
person{
name='zhangsan', age='20', idcard='342115454',
map={key=1, key2=2}, list=[java, html, js, css],
car=Car{name='21款小奔奔', pinpai='國產(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:小奔奔汽車}方式二、使用自定義配置文件對bean進(jìn)行注入
案例
(還是先來兩個(gè)實(shí)體類做為案例測試用)
- 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
測試輸出的信息為:
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)錯的解決
這篇文章主要介紹了mybatis的foreach標(biāo)簽語法報(bào)錯的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Spring Boot 項(xiàng)目做性能監(jiān)控的操作流程
這篇文章主要介紹了Spring Boot 項(xiàng)目如何做性能監(jiān)控,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Java數(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

