2021-11-06(为什么程序员是青春饭)
結論
關于程序員的工作是否是在吃“青春飯”這個話題,在網上及網下的討論熱度,完全不亞于編程語言之爭。我先說自己的觀點,也希望和大家討論一下,看看是不是自己哪里想得不對。
結論:程序員確實是吃“青春飯”的。
看到這句話你可能有點失望,我相信你肯定是因為擔憂,所以才會關注這個話題。你希望找到一個結論,來證明程序員不是吃"青春飯"的。因為我和你一樣,也擔憂過。可能你做過的事情,我都已經做過一遍了,比如去看全網的文章。
接下來言歸正傳( 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會根據類路徑中的jar依賴為項目進行自動配置, 如:添加了spring-boot-starter-web依賴, 會自動添加Tomcat和SpringMVC的依賴, SpringBoot會對Tomcat和SpringMVC進行自動配置.
A. SpringBoot自動配置的注解是 @EnableAutoConfiguration.
B. 我們用的時候是在啟動類上加@SpringBootApplication,這個注解是復合注解,內部包含 @EnableAutoConfiguration
C. @EnableAutoConfiguration內部有一個@Import, 這個注解才是完成自動配置的關鍵.
D. @Import導入一個類(AutoConfigurationImportSelector),這個類內部提供了一個方法(selectImports). 這個方法會掃描導入的所有jar包下的spring.factories文件. 解析文件中自動配置類key=value, 將列表中的類創建,并放到Spring容器中.
總之一個@SpringBootApplication注解就搞定了所有事, 它封裝了核心的@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan這三個類,大大節省了程序員配置時間,這就是SpringBoot的核心設計思想.
6.6 SpringBoot熱部署(了解)
導入spring-boot-devtools這個jar包: 就可以完成熱部署了.
6.7 SpringBoot中的配置文件(必會)
(1)有哪些配置文件?
bootstrap: yml/application
application: yml/application
(2)上面兩種配置文件有什么區別?
使用spring cloud config配置中心時, 需要加載連接配置中心的配置屬性的, 就 可以使用bootstrap來完成.
加載不能被覆蓋的屬性.
加載一些加密/解密的數據.
(3)讀取配置文件的方式?
? 讀取默認配置文件
需要注入Environment類, 使用environment.getProperty(peorperties中的key), 這樣就能獲得key對應的value值
@value(${key.value}) 直接讀取
? 讀取自定義配置文件
? 自定義配置文件后綴必須是.propeties
? 編寫和自定義配置文件對應的java類, 類上放3個注解
? @ConfigurationProperties(“前綴”)
? @PropertySource(“指定配置文件”)
? @@Component包掃描
? 讀取的時候就跟讀取默認配置文件一樣.
總結
以上是生活随笔為你收集整理的2021-11-06(为什么程序员是青春饭)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外语学习的真实方法与误区19
- 下一篇: 一文读懂直播卡顿优化那些事儿