隨著Spring Boot的面世已經(jīng)有幾年了,給程序員帶來的最直觀的感受是配置減少了淋硝。至于Spring Boot的核心功能和原理雹熬,很少人能答上來。為了在互聯(lián)網(wǎng)寒冬中能找到工作谣膳。今天根據(jù)所學(xué)發(fā)表下關(guān)于spring Boot的愚見,下面以考官和面試者的場景展開竿报。
這是面試官的問題:
我看你上面寫了熟悉 Spring Boot,那你能講下為什么我們要用 Spring Boot 嗎继谚?
下面我列幾個(gè)最常見的三個(gè)回答:
A:Spring Boot 最主要是不用 XML 配置烈菌,可以用 Java 來配置 bean,省去了許多配置文件花履。
面試官又問:Spring 本身就可以用 Java 配置代替 XML 配置芽世,和 Spring Boot 有什么關(guān)系呢?
然后對方就吱吱唔唔了……
B:Spring Boot 我們用來做 Spring Cloud 微服務(wù)诡壁。
面試官又問:微服務(wù)和 Spring Boot 有什么關(guān)系济瓢?不用 Spring Boot 行不行?
然后對方就吱吱唔唔了……
C:Spring Boot 可以打 jar 包部署欢峰,內(nèi)部集成了Tomcat。
這個(gè)確實(shí)是 Spring Boot 的特色,但是我還是覺得沒有答到關(guān)鍵點(diǎn)上纽帖。
然后我繼續(xù)問宠漩,如果不考慮打 jar 包部署呢,然后就沒然后了……
為什么我們要用 Spring Boot懊直,顯然上面三個(gè)求職者沒有答到關(guān)鍵點(diǎn)上扒吁,Spring Boot 最重要的功能是:自動(dòng)配置。
為什么說是自動(dòng)配置室囊?
Spring Boot 的開啟注解是:@SpringBootApplication雕崩,其實(shí)它就是由下面三個(gè)注解組成的:
@Configuration
@ComponentScan
@EnableAutoConfiguration
上面三個(gè)注解,前面兩個(gè)都是 Spring 自帶的融撞,和 Spring Boot 無關(guān)盼铁,所以說上面的回答的不是在點(diǎn)上。
所以說 Spring Boot 最最核心的就是這個(gè) @EnableAutoConfiguration 注解了尝偎,它能根據(jù)類路徑下的 jar 包和配置動(dòng)態(tài)加載配置和注入bean饶火。
舉個(gè)例子,比如我在 lib 下放一個(gè) druid 連接池的 jar 包致扯,然后在 application.yml 文件配置 druid 相關(guān)的參數(shù)肤寝,Spring Boot 就能夠自動(dòng)配置所有我們需要的東西,如果我把 jar 包拿掉或者把參數(shù)去掉抖僵,那 Spring Boot 就不會自動(dòng)配置鲤看。
這樣我們就能把許多功能做成公共的自動(dòng)配置的啟動(dòng)器(starters),其實(shí) druid 連接池就是這么做的耍群,它提供了針對 Spring Boot 的啟動(dòng)器:druid-spring-boot-starter义桂。
有了這個(gè)自動(dòng)配置的啟動(dòng)器,我們就能非常簡單的使用它世吨,
<dependency>
? <groupId>com.alibaba</groupId>
? <artifactId>druid-spring-boot-starter</artifactId>
? <version>1.1.10</version>
</dependency>
再添加相關(guān)參數(shù):
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
……
如果是傳統(tǒng)的項(xiàng)目澡刹,我們要自己手動(dòng)寫一大堆的配置,而且還不靈活耘婚,有了這個(gè)啟動(dòng)器罢浇,我們就可以做到簡單集成。具體大家可以看 druid-spring-boot-starter 是怎么實(shí)現(xiàn)的沐祷。
所以嚷闭,這才是 Spring Boot 的核心,這才是我們?yōu)槭裁词褂?Spring Boot 的原因赖临。如果答不到這個(gè)關(guān)鍵點(diǎn)胞锰,那真沒有掌握到 Spring Boot 的核心所在。
最后:歡迎各位學(xué)習(xí)java和大數(shù)據(jù)的朋友們加入Java交流學(xué)習(xí)群: 721506929(我在群里等你喲~一起來學(xué)習(xí)吧)
點(diǎn)擊鏈接加入群聊【java交流學(xué)習(xí)群】:https://jq.qq.com/?_wv=1027&k=5cjelsQ兢榨,群內(nèi)提供免費(fèi)的架構(gòu)資料還有:Java工程化嗅榕、高性能及分布式顺饮、高性能、深入淺出凌那。高架構(gòu)兼雄。性能調(diào)優(yōu)、Spring帽蝶,MyBatis赦肋,Netty源碼分析和大數(shù)據(jù)等多個(gè)知識點(diǎn)高級進(jìn)階干貨的免費(fèi)直播講解 可以進(jìn)來一起學(xué)習(xí)交流哦~
?
?