上個筆記寫了如何自己去創建Spring boot,以及如何去打jar包,其實,還是有些麻煩的,我們還自己新建了幾個文件夾不是。
Idea可以讓我們快速的去創建Spring boot應用,來看
一、快速創建Spring boot
沒啥講的了,點擊完成之后,我們需要等待幾分鍾,Idea會幫我們下載配置一些東西。
二、yml文件和自動注入
配置文件這個,我不打算細說,粗略的介紹一下,用的時候去百度就好了,目前已知的配置文件
1.xml
2.properties
3.yml
這三個里面,我最喜歡的是yml,最不喜歡的是xml
舉個例子,比如的的name是許嵩,age是32
yml的寫法是這樣的:(中間一定有個空格)
name: 許嵩 age: 32
而xml的寫法是這樣的。。。。。蒼天啊。。。。
<name>許嵩</name>
<age>32</age>
書歸正傳,我們開始寫了
首先,我們創建兩個類,一個Person,一個Dog
package com.vae.springboot.study.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<String> lists; private Dog dog; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", boss=" + boss + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + '}'; } 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<String> getLists() { return lists; } public void setLists(List<String> lists) { this.lists = lists; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } 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; } }
package com.vae.springboot.study.bean; 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; } }
這里有一個非常重要的一點,一定要寫ToString方法,我為了省事,沒寫這個,結果注入之后沒有顯示出來 一定要寫!
OK,現在來講一下
@Component 這個是加入到spring容器中
@ConfigurationProperties(prefix = "person") 這個是把類和我們的配置文件進行關聯,找的是person
我們再新建一個yml文件,如圖:
雖然上面有了一個properties,但是不管他,這倆是誰有誰起效,都有都一樣的話properties起效,貌似是
看看我的yml里面寫的啥
person: age: 32 name: Vae birth: 1985/05/14 boss: false maps: {k1: v1,k2: 12} lists: - 許嵩 - 林俊傑 dog: name: 格洛米 age: 3
看看測試里面
自動注入已經寫完了,我再次重復一下兩個特別重要的點
1.主程序是在study包下面,所有的類啊,Controller啊啥的,必須在study包下面,只有這樣,主程序才能對他們起效
2.類,必須寫Tostring方法................................
三、題外話
我上面采用的都是最方便的方式,這里把其它方式介紹一下,但是寫,還是上面的那樣寫
首先,配置文件的事,我沒講properties,這個寫中文的時候,會有亂碼,需要去Idea里面設置一下編碼格式為UTF-8
還有,我們的類和配置文件直接關聯,我用的是ConfigurationProperties的方式,其實還有一個@Value的方式,這個很難用,但是我還是介紹一下
@Value("${person.name}") private String name; @Value("#{11*2}") private Integer age; @Value("false") private Boolean boss;
這里舉了三個例子,下面用一張圖對比一下@ConfigurationProperties和@Value的區別
1.功能:這個不說了吧,一個寫一次完事,一個@Value每一個字段都要加...
2.松散綁定:這個是什么意思呢?比如我的yml里面寫 last-name,這個和lastName是一樣的意思, - 后面跟着的字母默認是大寫的,也就是 last-name=lastName
這個就是松散綁定,@ConfigurationProperties認識這種方式,支持。@Value不認識他。。。
3.SpEL:這個是啥呢就是我們上面寫的數字計算的spring表達式語言 ,年齡age上的 @Value("#{11*2}") 這個是11*2=22歲,@Value可以計算這個,@ConfigurationProperties不支持,不能計算
4.JSR303數據校驗,這個就是我們在字段上寫一個@Email 表明這個字段必須符合郵箱的格式才行。這個@ConfigurationProperties是支持的,@Value不支持
5.復雜類型封裝:就比如我們yml里面的map,這個就算復雜類型了,@Value依然不支持....
好了,講到這里,已經清楚@Value實在是弱雞,但是弱雞有弱雞的用處,假如我們只需要從yml里面讀取一個值,那這個時候我們可以使用@Value,就一個,寫起來還行。
Java Bean類還是乖乖的使用@ConfigurationProperties吧,這個例子告訴我們,天生我材必有用......