最近棧長面試了很多人,其中不乏說對 Spring Boot 很是熟悉的,而後當我問到一些 Spring Boot 核心功能和原理的時候,沒人能說得上來,或者說不到點上,能夠說一個問題就問趴下了!java
這是個人問題:面試
我看你上面寫了熟悉 Spring Boot,那你能講下爲何咱們要用 Spring Boot 嗎?spring
下面我列幾個最多見的三個回答:微信
A:Spring Boot 最主要是不用 XML 配置,能夠用 Java 來配置 bean,省去了許多配置文件。app
我又問:Spring 自己就能夠用 Java 配置代替 XML 配置,和 Spring Boot 有什麼關係呢?spring-boot
而後對方就吱吱唔唔了……微服務
B:Spring Boot 咱們用來作 Spring Cloud 微服務。源碼分析
我又問:微服務和 Spring Boot 有什麼關係?不用 Spring Boot 行不行?ui
而後對方就吱吱唔唔了……url
C:Spring Boot 能夠打 jar 包部署,內部集成了Tomcat。
這個確實是 Spring Boot 的特點,可是我仍是以爲沒有答到關鍵點上。
而後我繼續問,若是不考慮打 jar 包部署呢,而後就沒而後了……
爲何咱們要用 Spring Boot,顯然上面三個求職者沒有答到關鍵點上,Spring Boot 最重要的功能是:自動配置。
爲何說是自動配置?
Spring Boot 的開啓註解是:@SpringBootApplication,其實它就是由下面三個註解組成的:
上面三個註解,前面兩個都是 Spring 自帶的,和 Spring Boot 無關,因此說上面的回答的不是在點上。具體請看這篇文章:Spring Boot 最核心的 3 個註解詳解。
因此說 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 是怎麼實現的,也能夠參考以前寫的文章:Spring Boot自動配置原理、實戰。
因此,這纔是 Spring Boot 的核心,這纔是咱們爲何使用 Spring Boot 的緣由。若是答不到這個關鍵點,那真沒有掌握到 Spring Boot 的核心所在。
好了,今天的分享就到這裏,關注Java技術棧微信公衆號,在後臺回覆:boot,獲取棧長整理的更多的 Spring Boot 教程,都是實戰乾貨,如下僅爲部分預覽。
本文原創首發於微信公衆號:Java技術棧(id:javastack),關注公衆號在後臺回覆 "boot" 可獲取更多 Spring Boot 教程,轉載請原樣保留本信息。