結論
關于程式員的作業是否是在吃“青春飯”這個話題,在網上及網下的討論熱度,完全不亞于編程語言之爭,我先說自己的觀點,也希望和大家討論一下,看看是不是自己哪里想得不對,
結論:程式員確實是吃“青春飯”的,
看到這句話你可能有點失望,我相信你肯定是因為擔憂,所以才會關注這個話題,你希望找到一個結論,來證明程式員不是吃"青春飯"的,因為我和你一樣,也擔憂過,可能你做過的事情,我都已經做過一遍了,比如去看全網的文章,
接下來言歸正傳( SpringBoot運行原理剖析)
(一) SpringApplication類作用及run()方法作用
? SpringApplication這個類整合了其他框架的啟動類, 只要運行這一個類,所有的整合就都完成了.
? 呼叫run函式, 將當前啟動類的位元組碼傳入(主要目的是傳入@SpringBootApplication這個注解), 以及main函式的args引數.
? 通過獲取當前啟動類的核心資訊, 創建IOC容器.
(二) 當前啟動類@SpringBootApplication詳細剖析
run函式傳入的當前啟動類位元組碼, 最重要的是傳入了@SpringBootApplication, 點開該注解原始碼, 會發現有多個注解組成,接下來會詳細解釋每個注解的含義.
點開這個注解原始碼, 發現有4類注解.

(1) 第一類: JDK原生注解4個
@Target(ElementType.TYPE) //當前注解的使用范圍
@Retention(RetentionPolicy.RUNTIME) //生命周期
@Documented //宣告在生成doc檔案時是否帶著注解
@Inherited //宣告是否子類會顯示父類的注解
(2)第二類: @SpringBootConfiguration
點開該注解原始碼, 會發現本質是@Configuration,定義該類是個配置類功能等同于xml組態檔.

提到@Configuration就要提到他的搭檔@Bean, 使用這兩個注解就可以創建一個簡單的Spring配置類, 可以用來替代相應的xml組態檔.可以理解為創建了IOC容器了.
(3)第三類: @ComponentScan, 包掃描功能.
這個注解對應Spring的XML配置中的@ComponentScan,其實就是自動掃描并加載符合條件的組件(比如@Component和@Repository等)或者bean定義, 最終將這些bean定義加載到IoC容器中.
也可以通過basePackages等屬性來細粒度的定制@ComponentScan自動掃描的范圍, 如果不指定, 則默認掃描@ComponentScan所在類的package及子包進行掃描,
注:所以SpringBoot的啟動類最好是放在root package下,因為默認不指定basePackages, 這樣能掃描root package及子包下的所有類.
(4)第四類: @EnableAutoConfiguration
點開原始碼會發現,本質是@import, 自動匯入功能

- @EnableAutoConfiguration也是借助@Import的幫助,將所有符合自動配置條件的bean定義加載到IoC容器.
@EnableAutoConfiguration會根據類路徑中的jar依賴為專案進行自動配置, 如:添加了spring-boot-starter-web依賴, 會自動添加Tomcat和SpringMVC的依賴, SpringBoot會對Tomcat和SpringMVC進行自動配置. - 那么SpringBoot是如何完成自動配置的呢?
A. SpringBoot自動配置的注解是 @EnableAutoConfiguration.
B. 我們用的時候是在啟動類上加@SpringBootApplication,這個注解是復合注解,內部包含 @EnableAutoConfiguration
C. @EnableAutoConfiguration內部有一個@Import, 這個注解才是完成自動配置的關鍵.
D. @Import匯入一個類(AutoConfigurationImportSelector),這個類內部提供了一個方法(selectImports). 這個方法會掃描匯入的所有jar包下的spring.factories檔案. 決議檔案中自動配置類key=value, 將串列中的類創建,并放到Spring容器中.

- 8.5.3 總結
總之一個@SpringBootApplication注解就搞定了所有事, 它封裝了核心的@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan這三個類,大大節省了程式員配置時間,這就是SpringBoot的核心設計思想.
6.6 SpringBoot熱部署(了解)
匯入spring-boot-devtools這個jar包: 就可以完成熱部署了.
6.7 SpringBoot中的組態檔(必會)
(1)有哪些組態檔?
bootstrap: yml/application
application: yml/application
(2)上面兩種組態檔有什么區別? - bootstrap由父ApplicationContext加載, 比application組態檔優先被加載.
- bootstarp里的屬性不能被覆寫.
- application: springboot專案中的自動化配置.
- bootstrap:
使用spring cloud config配置中心時, 需要加載連接配置中心的配置屬性的, 就 可以使用bootstrap來完成.
加載不能被覆寫的屬性.
加載一些加密/解密的資料.
(3)讀取組態檔的方式?
? 讀取默認組態檔
需要注入Environment類, 使用environment.getProperty(peorperties中的key), 這樣就能獲得key對應的value值
@value(${key.value}) 直接讀取
? 讀取自定義組態檔
? 自定義組態檔后綴必須是.propeties
? 撰寫和自定義組態檔對應的java類, 類上放3個注解
? @ConfigurationProperties(“前綴”)
? @PropertySource(“指定組態檔”)
? @@Component包掃描
? 讀取的時候就跟讀取默認組態檔一樣.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/352135.html
標籤:其他
上一篇:一位普通碼農無法避免的時代碾壓
