隨著Spring Boot的面世已經有幾年了,給程式設計師帶來的最直觀的感受是配置減少了。至於Spring Boot的核心功能和原理,很少人能答上來。為了在網際網路寒冬中能找到工作。今天根據所學發表下關於spring Boot的愚見,下面以考官和麵試者的場景展開。
這是面試官的問題:
我看你上面寫了熟悉 Spring Boot,那你能講下為什麼我們要用 Spring Boot 嗎?
下面我列幾個最常見的三個回答:
A:Spring Boot 最主要是不用 XML 配置,可以用 Java 來配置 bean,省去了許多配置檔案。
面試官又問:Spring 本身就可以用 Java 配置代替 XML 配置,和 Spring Boot 有什麼關係呢?
然後對方就吱吱唔唔了……
B:Spring Boot 我們用來做 Spring Cloud 微服務。
面試官又問:微服務和 Spring Boot 有什麼關係?不用 Spring Boot 行不行?
然後對方就吱吱唔唔了……
C:Spring Boot 可以打 jar 包部署,內部整合了Tomcat。
這個確實是 Spring Boot 的特色,但是我還是覺得沒有答到關鍵點上。
然後我繼續問,如果不考慮打 jar 包部署呢,然後就沒然後了……
為什麼我們要用 Spring Boot,顯然上面三個求職者沒有答到關鍵點上,Spring Boot 最重要的功能是:自動配置。
為什麼說是自動配置?
Spring Boot 的開啟註解是:@SpringBootApplication,其實它就是由下面三個註解組成的:
@Configuration
@ComponentScan
@EnableAutoConfiguration
上面三個註解,前面兩個都是 Spring 自帶的,和 Spring Boot 無關,所以說上面的回答的不是在點上。
所以說 Spring Boot 最最核心的就是這個 @EnableAutoConfiguration 註解了,它能根據類路徑下的 jar 包和配置動態載入配置和注入bean。
舉個例子,比如我在 lib 下放一個 druid 連線池的 jar 包,然後在 application.yml 檔案配置 druid 相關的引數,Spring Boot 就能夠自動配置所有我們需要的東西,如果我把 jar 包拿掉或者把引數去掉,那 Spring Boot 就不會自動配置。
這樣我們就能把許多功能做成公共的自動配置的啟動器(starters),其實 druid 連線池就是這麼做的,它提供了針對 Spring Boot 的啟動器:druid-spring-boot-starter。
有了這個自動配置的啟動器,我們就能非常簡單的使用它,
先新增 jar 包依賴:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
複製程式碼
再新增相關引數:
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
複製程式碼
如果是傳統的專案,我們要自己手動寫一大堆的配置,而且還不靈活,有了這個啟動器,我們就可以做到簡單整合。具體大家可以看 druid-spring-boot-starter 是怎麼實現的。