2021-11-06(为什么程序员是青春饭)
結(jié)論
關(guān)于程序員的工作是否是在吃“青春飯”這個話題,在網(wǎng)上及網(wǎng)下的討論熱度,完全不亞于編程語言之爭。我先說自己的觀點,也希望和大家討論一下,看看是不是自己哪里想得不對。
結(jié)論:程序員確實是吃“青春飯”的。
看到這句話你可能有點失望,我相信你肯定是因為擔憂,所以才會關(guān)注這個話題。你希望找到一個結(jié)論,來證明程序員不是吃"青春飯"的。因為我和你一樣,也擔憂過。可能你做過的事情,我都已經(jīng)做過一遍了,比如去看全網(wǎng)的文章。
接下來言歸正傳( SpringBoot運行原理剖析)
(一) SpringApplication類作用及run()方法作用
? SpringApplication這個類整合了其他框架的啟動類, 只要運行這一個類,所有的整合就都完成了.
? 調(diào)用run函數(shù), 將當前啟動類的字節(jié)碼傳入(主要目的是傳入@SpringBootApplication這個注解), 以及main函數(shù)的args參數(shù).
? 通過獲取當前啟動類的核心信息, 創(chuàng)建IOC容器.
(二) 當前啟動類@SpringBootApplication詳細剖析
run函數(shù)傳入的當前啟動類字節(jié)碼, 最重要的是傳入了@SpringBootApplication, 點開該注解源碼, 會發(fā)現(xiàn)有多個注解組成,接下來會詳細解釋每個注解的含義.
點開這個注解源碼, 發(fā)現(xiàn)有4類注解.
(1) 第一類: JDK原生注解4個
@Target(ElementType.TYPE) //當前注解的使用范圍
@Retention(RetentionPolicy.RUNTIME) //生命周期
@Documented //聲明在生成doc文檔時是否帶著注解
@Inherited //聲明是否子類會顯示父類的注解
(2)第二類: @SpringBootConfiguration
點開該注解源碼, 會發(fā)現(xiàn)本質(zhì)是@Configuration,定義該類是個配置類功能等同于xml配置文件.
提到@Configuration就要提到他的搭檔@Bean, 使用這兩個注解就可以創(chuàng)建一個簡單的Spring配置類, 可以用來替代相應(yīng)的xml配置文件.可以理解為創(chuàng)建了IOC容器了.
(3)第三類: @ComponentScan, 包掃描功能.
這個注解對應(yīng)Spring的XML配置中的@ComponentScan,其實就是自動掃描并加載符合條件的組件(比如@Component和@Repository等)或者bean定義, 最終將這些bean定義加載到IoC容器中.
也可以通過basePackages等屬性來細粒度的定制@ComponentScan自動掃描的范圍, 如果不指定, 則默認掃描@ComponentScan所在類的package及子包進行掃描。
注:所以SpringBoot的啟動類最好是放在root package下,因為默認不指定basePackages, 這樣能掃描root package及子包下的所有類.
(4)第四類: @EnableAutoConfiguration
點開源碼會發(fā)現(xiàn),本質(zhì)是@import, 自動導(dǎo)入功能
@EnableAutoConfiguration會根據(jù)類路徑中的jar依賴為項目進行自動配置, 如:添加了spring-boot-starter-web依賴, 會自動添加Tomcat和SpringMVC的依賴, SpringBoot會對Tomcat和SpringMVC進行自動配置.
A. SpringBoot自動配置的注解是 @EnableAutoConfiguration.
B. 我們用的時候是在啟動類上加@SpringBootApplication,這個注解是復(fù)合注解,內(nèi)部包含 @EnableAutoConfiguration
C. @EnableAutoConfiguration內(nèi)部有一個@Import, 這個注解才是完成自動配置的關(guān)鍵.
D. @Import導(dǎo)入一個類(AutoConfigurationImportSelector),這個類內(nèi)部提供了一個方法(selectImports). 這個方法會掃描導(dǎo)入的所有jar包下的spring.factories文件. 解析文件中自動配置類key=value, 將列表中的類創(chuàng)建,并放到Spring容器中.
總之一個@SpringBootApplication注解就搞定了所有事, 它封裝了核心的@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan這三個類,大大節(jié)省了程序員配置時間,這就是SpringBoot的核心設(shè)計思想.
6.6 SpringBoot熱部署(了解)
導(dǎo)入spring-boot-devtools這個jar包: 就可以完成熱部署了.
6.7 SpringBoot中的配置文件(必會)
(1)有哪些配置文件?
bootstrap: yml/application
application: yml/application
(2)上面兩種配置文件有什么區(qū)別?
使用spring cloud config配置中心時, 需要加載連接配置中心的配置屬性的, 就 可以使用bootstrap來完成.
加載不能被覆蓋的屬性.
加載一些加密/解密的數(shù)據(jù).
(3)讀取配置文件的方式?
? 讀取默認配置文件
需要注入Environment類, 使用environment.getProperty(peorperties中的key), 這樣就能獲得key對應(yīng)的value值
@value(${key.value}) 直接讀取
? 讀取自定義配置文件
? 自定義配置文件后綴必須是.propeties
? 編寫和自定義配置文件對應(yīng)的java類, 類上放3個注解
? @ConfigurationProperties(“前綴”)
? @PropertySource(“指定配置文件”)
? @@Component包掃描
? 讀取的時候就跟讀取默認配置文件一樣.
總結(jié)
以上是生活随笔為你收集整理的2021-11-06(为什么程序员是青春饭)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外语学习的真实方法与误区19
- 下一篇: 一文读懂直播卡顿优化那些事儿