1. 程式人生 > >小編帶著小白看springboot源碼2

小編帶著小白看springboot源碼2

javabean true oss factor yml 原理 可能 應該 這樣的

上一節講到先創建maven項目,然後導入依賴,主配置類等步驟,現在來個快速創建一個springboot模板,不需要向上節那麽繁瑣。

1.快速創建springboot應用

  IDEA---->file---->new---->project---->Spring Initializer
技術分享圖片
註意jdk版本,然後就是下一步
技術分享圖片
點擊Next
技術分享圖片
後面一直點Next就ok了,很容易,很快就創建了一個springboot應用了,再寫個controller,後面跟上一節一樣。不贅述了。

2.認識@ConfigurationProperties註解(很重要的一個註解)

  我們知道,springboot應用就是為了不寫xml配置文件,盡量運用純註解的方式。這個註解的作用就是將一個實體類的屬性和一個配置文件(properties,yml)綁定一起,我們可以通過修改配置文件的值來控制這個實體類的屬性值

  properties:比如默認端口是8080,但是出於某些情況要修改為8081,我們只需要在.properties配置文件中寫入server.port=8081

  yml:只需要在.yml配置文件中寫入下圖所示,就可以了。
技術分享圖片
接下來我們來簡單認識一下yml配置文件(其實作用是跟xml差不多的,只不過比xml更簡單,運用空格來代替xml中的標簽)

  看下面這個類:
技術分享圖片
來看yml給這個javabean綁定屬性值
技術分享圖片
技術分享圖片
其中,person這個名字可以隨便取,無所謂!

  綠線標的最好對其,這樣的話當屬性多了,看起來一目了然,找起來很方便。

  

  這些寫完之後,就給person類加上註解
技術分享圖片
接下來,測試一下:
技術分享圖片
到這裏@ConfigurationProperties註解的作用就差不多清楚了(當然還有一些註解,比如@ImportResource可以導入xml配置文件,【@PropertySource可以給配置類導入properties配置文件,@Value可以給單個屬性註入properties文件中的值】<-------這兩個通常一起用),其他註解可以自己去測試,暫時用的比較少,所以就跳過,等以後碰到了在學一下。

3.粗略認識xxxAutoConfiguration的作用

  上一節說了,啟動主配置類的main方法,最終的結果就是去所有jar包下找“META-INF\spring.factories”文件裏面,將裏面的內容轉換成properties文件,再根據傳入的鍵(EnableAutoConfiguration)對應的值(就是很多的xxxAutoConfiguration),把這些自動配置類加載到容器裏。

  繼續,這些自動配置類加載到容器裏,不一定會有作用,只有滿足了特定的情況,這些自動配置類中就會有某些類出來起作用(這點很人性化)

  舉個最簡單的自動配置類--------->HttpEncodingAutoConfiguration(是一個http編碼的自動配置類,相當於以前web.xml裏面配置過一個CharacterEncodingFilter)

  說這個之前,學過spring註解版的人,一些簡單的註解應該記得吧!比如以下註解:

  @Bean:標在方法上面;往容器裏註入一些組件(就是有特殊作用的類)相當於xml中的<bean>標簽,通常在配置類裏面

  @Configuration:標在類上面;標註一個配置類,相當於以前的xml配置文件,裏面有很多的@Bean

  @Conditional(xxxx.class):標在類或方法上面;這個就是在xxxx.class類中有個match方法進行邏輯判斷,返回布爾值,返回true,則被@Conditional註解標註的配置類生效(本質上就是這個被標註的配置類裏面往容器裏面導入組件)

  回顧了一些spring的註解之後,再來看HttpEncodingAutoConfiguration這個類
技術分享圖片
這裏有個小邏輯註意一下:我們自己在yml設置屬性值------------->yml文件和javabean綁定,將javabean丟到容器裏---------->HttpEncodingAutoConfiguration構造器從容器中獲取javabean,保存供類中其他方法使用--------->如上圖中的filter.setEncoding(this.properties.getCharset().name());在那個javabean(此處為HttpEncodingProperties.class類中有個屬性Charset,屬性值DEFAULT_CHARSET,而DEFAULT_CHARSET=Charset.forName("UTF-8");所以默認就是設置utf-8編碼)
技術分享圖片
技術分享圖片
這也是說了一個最簡單的xxxAutoConfiguration,不過其他的自動配置類也類似這種原理,可能還要復雜的多,那就要好好拆開慢慢理解了,後續我也會慢慢解析這種源碼來幫助我們理解。

小編帶著小白看springboot源碼2