【SpringBoot 2】(五)自動配置簡析源碼 開發中小技巧

寫在前面在這里插入圖片描述🛫更多知識總結見SpringBoot 2專欄
🚕本篇知識點總結自尚硅谷雷神的視頻
🚒博主對于該知識尚在學習階段
🚄如果發現存在問題請毫不吝嗇的指出
🚀🚀扎哇太棗糕的博客首頁🚀🚀

文章目錄

  • 1 自動配置底層分析
    • 1.1 ?自動配置注解解析
    • 1.2 修改默認配置
    • 1.3 總結
    • 1.4 最佳實踐
  • 2 開發小技巧
    • 2.1 Lombok簡化開發
    • 2.2 偽熱更新
    • 2.3 創建Spring Initailizr項目

1 自動配置底層分析

1.1 ?自動配置注解解析

@SpringBootApplication注解是SpringBoot的核心注解,他是由以下三個注解總和而成.

  • @SpringBootConfiguration
    該注解底層有一個@Configuration注解,標明當前類是一個配置類
  • @EnableAutoConfiguration該注解又由以下兩個注解組合而成
    • @AutoConfigurationPackage:底層使用@Import({Registrar.class})向容器中注冊組件,Registrar.class里獲取到主程序所在的包并將包下的所有組件導入進來,這也就間接說明了SpringBoot的默認包掃描規則: 主程序(MainApplication)所在的包及這個包的所有子包都會被掃描
      在這里插入圖片描述
    • @Import(AutoConfigurationImportSelector.class):AutoConfigurationImportSelector.class下有一個selectImports方法,方法里面又使用getAutoConfigurationEntry內部的getCandidateConfigurations方法獲取需要注冊的組件都有哪些,getCandidateConfigurations方法里面使用SpringFactoriesLoader.loadFactoryNames內層的loadSpringFactories方法里的getResources(“META-INF/spring.factories”)默認掃描當前系統里面所有jar包META-INF/spring.factories位置下的文件。后面發現spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories文件,文件里面有個EnableAutoConfiguratio配置項寫死了spring-boot一啟動就要給容器中加載的所有配置類。雖然我們127個場景中自動配置啟動的時候默認全部加載所有的xxxxAutoConfiguration,但是最終按照條件裝配規則(@Conditional)按需配置。在這里插入圖片描述
  • @ComponentScan
    這個注解定義了包掃描的規則

1.2 修改默認配置

??SpringBoot默認會在底層配好所有的組件,但是如果用戶自己配置了以用戶的優先。使用@ConditionalOnMissingBean注解判斷容器中是否存在該組件的話就使用默認的類進行配置

1.3 總結

● SpringBoot先通過xxxxxAutoConfiguration加載所有的自動配置類
● 每個自動配置類按照條件進行生效,默認都會綁定配置文件指定的值,這個值就在xxxxProperties里面拿,xxxProperties和配置文件進行了綁定。
● 生效的配置類就會給容器中裝配很多組件
● 只要容器中有這些組件,相當于這些功能就有了
● 定制化配置
??○ 用戶直接自己@Bean替換底層的組件
??○ 在創建的配置文件中使用配置項修改默認的配置信息。比如說配置字符編碼格式在HttpEncodingAutoConfiguration里的注解中可以得知在這里插入圖片描述

xxxxxAutoConfiguration —> 組件 —>
xxxxProperties里面拿值 ----> application.properties

1.4 最佳實踐

??根據上述自動配置原理總結SpringBoot的最佳項目實踐流程

  • 引入場景依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 查看自動配置了哪些組件
    • 默認場景對應的自動配置一般都生效
    • 配置文件中debug=true開啟自動配置報告,其中Positive(生效組件)、Negative(不生效組件)以及會顯示不生效的原因是什么沒有匹配到
  • 修改配置項
    • 參考文檔:SpringBoot可能會用到的所有配置項
    • 按照前面的定制化方式自己分析
  • 組件修改
    • @Bean、@Component……注解
      …………業務流程

2 開發小技巧

2.1 Lombok簡化開發

第一步: 導入依賴(由于starter啟動器中已經配置了版本,于是可以不去再次進行設置)

<dependency> 	<groupId>org.projectlombok</groupId> 	<artifactId>lombok</artifactId>
</dependency> 

第二步: 搜索安裝lombok插件 在這里插入圖片描述
第三步: 使用注解進行開發

  • JavaBean的注解 使用注解并不會直接自動生成代碼,而是在編譯期間將注解的方法補上。而且如果需要使用多參但不全構造器的話,沒有注解可以完成,需要自己在源碼上手寫

    • @NoArgsConstructor: 無參構造器
    • @AllArgsConstructor: 全參構造器
    • @ToString: 全參數的toString方法
    • @Data: getter和setter方法在這里插入圖片描述
  • 生成日志

    • 類上加注解@Slf4j
    • log.info方法打印日志在這里插入圖片描述

2.2 偽熱更新

第一步: 導入依賴

<dependency> 	<groupId>org.springframework.boot</groupId> 	<artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency> 

第二步: 使用熱更新功能,在項目源碼中更新了代碼,不需要重啟服務器,直接使用Ctrl+F9刷新項目信息,就可以使用更新之后的代碼了。靜態頁面的改變使用Ctrl+F9,就是在服務器中直接更新頁面信息,其他的信息改變就相當于使用按鈕重啟項目。如果想要實現不需任何操作就實時更新的話可以使用JRebel,但是缺點就是收費。

2.3 創建Spring Initailizr項目

??這個小技巧就是在使用IDEA的企業版開發的時候,直接創建一個springBoot項目,還可以自定義項目中所需要的技術,創建完成之后就會自動生成SpringBoot項目相應的主程序類、pom.xml文件等在這里插入圖片描述
右鍵創建項目的時候選擇Spring Initailizr,主要就是勾選自己需要的技術在這里插入圖片描述效果:在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535104.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jar包導出無法顯示圖片或者音樂_如何制作圖片視頻短片,配上音樂閃耀朋友圈!...

把圖片制作成視頻短片&#xff0c;再配上一首好聽的音樂&#xff0c;發到朋友圈&#xff0c;不僅可以更具創意的分享自己的生活點滴&#xff0c;更能因您的創意獲得一大票的贊哦&#xff01;看到別人分享自己制作的圖片視頻短片&#xff0c;是不是心癢癢也想做一個呢&#xff1…

【SpringBoot 2】(六)配置文件 web開發相關

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

deepl windows_推薦一個為程序員深度開發的翻譯插件DeepL

DeepL深度翻譯器DeepL一個程序員的翻譯神器&#xff0c;可能有人要問&#xff0c;市面上這么多的翻譯插件這么多&#xff0c;我為毛要用你的。首先這個翻譯神器可以實現多個翻譯引擎的翻譯&#xff0c;目前支持有道和google&#xff0c;下一步我會把最近特別流行的翻譯軟件Deep…

再次攜號轉網_陜西通信管理局:對移動公司拒絕對用戶提供攜號轉網服務的違法行為處罰!...

據陜西省通信管理局網站11月25日消息&#xff0c;陜西省通信管理局25日發出《關于中國移動西安分公司無正當理由拒絕對用戶提供攜號轉網服務調查處理情況的通報》稱&#xff0c;近期&#xff0c;省通信管理局對中國移動西安分公司(以下簡稱西安移動)無正當理由拒絕對用戶提供攜…

【SpringBoot 2】(七)請求處理——映射 常用注解 方法參數的小技巧

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

北方人思想為什么落后_廣西人為什么很少到北方打工?

廣西雖然山青水秀&#xff0c;環境優美&#xff0c;但目前還是個經濟欠發達的地區&#xff0c;很多人在本地很難找到合適的工作&#xff0c;所以紛紛選擇外出打工了&#xff0c;包括我自己。在廣西外出打工的人群當中&#xff0c;絕大部分人都去了廣東&#xff0c;當然&#xf…

刷網絡課_網絡營銷實踐心得—劉薈萌

一、實踐時間2020.9.1~2020.12.25二、實踐內容1、實踐資源準備&#xff1a;實踐平臺賬號注冊、了解相關網站的使用方法。2、認識網絡營銷系統&#xff1a;企業網絡營銷信息源類別及傳遞渠道調查。3、信息源構建&#xff1a;微信公眾號運營、新媒體平臺運營(微博、博客)4、網絡推…

【SpringBoot 2】(八)數據響應 頁面響應

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

2020年最快的dns_2020年哪里換旅行證最快取證?需要幾天?

關注我的都知道了很多的實用攻略你還在等什么~美媽不論去哪個地方更換旅行證&#xff0c;都喜歡問“這個地方是否可以加急&#xff1f;”“最快幾天可以拿到新的旅行證&#xff1f;”今天就來整理一下2020年各地換證需要幾天&#xff0c;是否可以加急。"目前更換旅行證有兩…

語句拼接_Linux 進階語句

日常工作需要用到&#xff0c;shell語句用于分析定位生產問題&#xff0c;本次做個記錄# 將日志先拷貝到當前目錄cp /tmp/nginx.log .本次目標是&#xff1a; 找出log中的404 500的報錯#使用管道取出相關日志less nginx.log 通過/ 查詢得知 狀態碼處于第9個字段#使用 awk 篩選出…

【SpringBoot 2】(九)異常處理 web原生組件的注入

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

項目管理最佳實踐方法_項目管理最佳實踐,企業如何進行有效的項目管理

前言&#xff1a;企業在劃分項目時&#xff0c;可按照項目的復雜程度、管理范圍等將項目分為三個級別&#xff0c;分別是企業級、部門級和小組級&#xff08;與目標劃分原則相同&#xff09;&#xff0c;然后將每一級的目標與項目對應起來。我們知道&#xff0c;企業制定的目標…

python 歷遍子彈_python之子彈移動

"""新增功能&#xff1a;完成我方坦克發射子彈的移動"""import pygameimport timeimport randomwin_width 700win_height 500bg_color pygame.Color(0, 0, 0)text_color pygame.Color(255, 0, 0)class MainGame():window Nonemy_tank None…

【SpringBoot 2】(十)數據庫相關

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

線性分組碼的最小漢明距為6_第二章 線性代數

2.1 標量、向量、矩陣和張量標量(scalar)一個標量就是一個單獨的數&#xff0c;用斜體表示標量。向量(vector)一個向量是一列有序排列的數&#xff0c;用粗寫的小寫字母表示。矩陣(matrix)矩陣式一個二維數組&#xff0c;其中的么一個元素由兩個索引(而非一個)所確定&#xff0…

【SpringBoot 2】(十一)單元測試JUnit 5 指標監控

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

sklearn中lstm_分別用sklearn和tensorflow做房價預測

原標題&#xff1a;分別用sklearn和tensorflow做房價預測本篇是后面用tensorflow做回歸時的一個參照&#xff0c;忍不住要說的是sklearn真是簡單好用&#xff0c;要不是他沒有卷積cnn等時髦模型&#xff0c;真是不想用其他家的了。經典的sklearn集成模型結果&#xff1a;真是又…

多個containers 共用一個pvc_2020阜新PVC-UH市政管廠家-煙臺塑膠

2020阜新PVC-UH市政管廠家煙臺金沃泉塑膠有限公司主要產品PVC-U、PVC-M、PVC-UH聚氯乙烯給給水管材、HDPE高密度聚乙烯給水管材、CPVC氯化聚氯乙烯、MPP高壓電力電纜護套管、PERT-Ⅱ型熱力管道、高分子托輥管、水處理膜殼管。公司為電網、南方電網、電建集團、建筑集團、五礦集…

【SpringBoot 2】(十二) profile功能 自定義starter

寫在前面&#x1f6eb;更多知識總結見SpringBoot 2專欄 &#x1f695;本篇知識點總結自尚硅谷雷神的視頻 &#x1f692;博主對于該知識尚在學習階段 &#x1f684;如果發現存在問題請毫不吝嗇的指出 &#x1f680;&#x1f680;扎哇太棗糕的博客首頁&#x1f680;&#x1f680;…

jpa transaction 回滾_我遇到的JPA中事務回滾的問題

在最近的項目中&#xff0c;做的是解析XML文件&#xff0c;解析過程中會有異常&#xff0c;比如&#xff1a;XML文件中節點的數據和與之對應的數據庫的字段中數據的類型不匹配&#xff1b;XML中數據長度超過數據庫定義的長度&#xff1b;有數據了的重復插入問題&#xff1b;讀取…