一、springboot總結
1、概述
springboot是一種快速使用spring框架的簡便方式,springboot簡單來說相當於一個程序搭建的腳手架,最大的作用就是能夠幫助我們快速構建項目,並且盡可能的減少xml的配置文件,讓程序的開發更加的簡單,開箱即用,快速上手,讓我們在程序開發的過程中能狗將更多的精力去關注到程序的業務邏輯,而並非是配置文件,總之,我為springboot總結了三個字,概括:輕(易配置,易通用,啟動時間段),快,簡
2、為什么要用springboot
因為在之前Java開發有一個特別大的痛點就是配置特別臃腫和麻煩,有時候當你在幸幸苦苦搭環境的時候,可能python程序員早已經將代碼敲完了(年輕人不講武德),主要就是原因就是以下兩條:
1、復雜的配置
項目中的各種配置其實是開發時的一個損耗,程序員在開發過程中思維需要在項目配置和業務邏輯之間來回切換,所有的對程序員來時是一件比較頭疼的事,在程序開發的過程中我覺得程序員因該把更多的時間和經歷放在業務代碼上,配置這些因該有時間私下悄悄研究
2、混亂的項目管理
項目中的依賴管理是一件非常難搞的事情,本來選擇用哪些庫就已將很頭疼了,但是選擇完依賴之后還得考慮版本沖突的問題,如果前期搞不好,后期可能出現致命的問題,並且在選擇上面就是一種消耗,並且如果選擇不對,后期的返工更是一個消耗,搞不好還會拉慢項目的進度,所有這個工作一般是公司的主程來搞。
綜上,springboot就是解決了以上的問題,能夠快速搭建一個開發環境,而且還沒有那么多復雜的配置,並且可以對項目依賴進行一個很好的管理
3、springboot的特點
1、簡易輕便,開箱即用,容易上手
2、快,環境搭建快,沒有繁瑣的配置,約定大於配置
3、提供了一些大型項目中常見的非功能性的特性,內嵌服務器,安全,指標,健康檢測,等
以上大概就是springboot的主要的一些特點
4、springboot支持的配置文件類型
1、.properties(優先加載,和之前的一樣,但是一般用后者)
2、.yml(采用縮進的方式,一般用這個,因為他可以放集合數組,並且比較清晰,容易閱讀)
3、.yaml(同上)
5、springboot自動配置原理
springboot的有一個啟動類,可以從這個啟動類出發進行探究:
啟動類上面有一個關鍵的注解:@SpringBootApplication,main方法中有一個run方法,springApplication.run(),
分開討論一下:
1、**SpringBootApplication:**點擊進入,可以看到有七個關鍵的注解:
@Target(ElementType.TYPE)注解在什么位置生效,ElementType.TYPE在類上
@Retention(RetentionPolicy.RUNTIME)什么時候生效,RetentionPolicy.RUNTIME運行時生效
@Documented 是否生成api文檔
@Inherited 是否被繼承
**@SpringBootConfiguration(點進去@Configuration)**聲明了當前類為配置類,springboot會自動掃描到添加了@Configuration的類,並且讀取了配置信息,@SpringBootConfiguration聲明了當前類為springboot的配置類,springboot有一個,所以我們不需自己添加
@EnableAutoConfiguration是否引入了一些第三方庫,如果引入了第三方庫的一些依賴,這些配置生效,所以我們在構建了springboot項目后,如果想要引用第三方庫,只需要導入相應的依賴,配置都交給springboot處理
@ComponentScan就是一個掃描包的作用,因為這個注解是加在springboot的啟動類,所以掃描的包是在類同級的包以及子包,因此,一般啟動類會放在一個比較前的包目錄中。
觸發自動配置:引入相應的starter依賴,引入條件特定的類,然后就會出發自動配置
6、默認配置原理
我們可以在SpringApplication.run的方法中跟進run方法,然后在跟進,然后在跟進SpringFactoriesLoader,最后找到spring.factories,因此,在springboot初始化的時后,加載所有的classpath:META-INF/spring.factories文件,而在Spring的一個依賴包:spring-boot-autoconfigure中,就有這樣的文件,我們只要引入了第三方配置,都會有類似文件
@Configuration:聲明這個類是一個配置類
@ConditionalOnWebApplication(type = Type.SERVLET)
ConditionalOn,翻譯就是在某個條件下,此處就是滿足項目的類是是Type.SERVLET類型,也就是一個普通web工程,顯然我們就是
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
這里的條件是OnClass,也就是滿足以下類存在:Servlet、DispatcherServlet、WebMvcConfigurer,其中Servlet只要引入了tomcat依賴自然會有,后兩個需要引入SpringMVC才會有。這里就是判斷你是否引入了相關依賴,引入依賴后該條件成立,當前類的配置才會生效!
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
這個條件與上面不同,OnMissingBean,是說環境中沒有指定的Bean這個才生效。其實這就是自定義配置的入口,也就是說,如果我們自己配置了一個WebMVCConfigurationSupport的類,那么這個默認配置就會失效!
總結
SpringBoot為我們提供了默認配置,而默認配置生效的步驟:
@EnableAutoConfiguration注解會去尋找META-INF/spring.factories文件,讀取其中以EnableAutoConfiguration為key的所有類的名稱,這些類就是提前寫好的自動配置類
這些類都聲明了@Configuration注解,並且通過@Bean注解提前配置了我們所需要的一切實例。完成自動配置
但是,這些配置不一定生效,因為有@ConditionalOn注解,滿足一定條件才會生效。比如條件之一:是一些相關的類要存在
類要存在,我們只需要引入了相關依賴(啟動器),依賴有了條件成立,自動配置生效。
如果我們自己配置了相關Bean,那么會覆蓋默認的自動配置的Bean
我們還可以通過配置application.properties文件,來覆蓋自動配置中的屬性
1)啟動器
所以,我們如果不想配置,只需要引入依賴即可,而依賴版本我們也不用操心,因為只要引入了SpringBoot提供的stater(啟動器),就會自動管理依賴及版本了。
因此,玩SpringBoot的第一件事情,就是找啟動器,SpringBoot提供了大量的默認啟動器
2)全局配置
另外,SpringBoot的默認配置,都會讀取默認屬性,而這些屬性可以通過自定義application.properties文件來進行覆蓋。這樣雖然使用的還是默認配置,但是配置中的值改成了我們自定義的。
因此,玩SpringBoot的第二件事情,就是通過application.properties來覆蓋默認屬性值,形成自定義配置。我們需要知道SpringBoot的默認屬性key,非常多,可以再idea中自動提示
————————————————
版權聲明:本文為CSDN博主「lbiti」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lbiti/article/details/109909819