springboot自動配置的原理_SpringBoot自動配置原理

SpringBoot的啟動入口就是一個非常簡單的run方法,這個run方法會加載一個應用所需要的所有資源和配置,最后啟動應用。

0e4a662cc97840e88a0b870936914fb9

通過查看run方法的源碼,我們發現,run方法首先啟動了一個監聽器,然后創建了一個應用上下文ConfigurableApplicationContext,我們知道,context就是用來加載各種bean和環境配置等信息。

99f0b8dfd1ef4c2683d82bb2541f7836

在context的初始化過程中,會調用一個load方法,將我們的啟動類當做參數(sources)傳進去,這個方法的主要作用就是加載應用所需的各種bean和資源配置。

62c73bb06d084df18047ad8ee802fc54

load方法會創建一個BeanDefinitionLoader,由BeanDefinitionLoader的loader方法來執行具體的加載。

69ed6d9ecbf44678aba1697e255ecae3

BeanDefinitionLoader的load方法根據所傳入的不同source類型來選擇不同的加載方式,前面說到,這整個過程之中,source里面就只有啟動類這一個對象,所以這里就將其強轉成Class并加載。

8b993b21e3704e9b952e8494d1910381
470a6511fd7849bb89f52575050a9bc0

加載Class的方法里面調用了一個isComponent(Class> type)方法,這個方法便是用來判斷加載的類上有沒有注解的,如果有,就要開始解析注解了。

如此一來,啟動類上的@SpringBootApplication注解就會被調用,這個注解是實現SpringBoot自動配置功能的關鍵所在。

查看@SpringBootApplication的源碼,我們發現它實際上是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三個注解的合集。其中@EnableAutoConfiguration是啟用自動配置的,并將導入一些自動配置的類定義;@ComponentScan用來加載應用中一些自定義的類。

0ab73925df914241ad63dcd95ebea199

@EnableAutoConfiguration最終會導入一個自動配置的類列表,這些類大多數都處于備用狀態。這邊是SpringBoot自動配置的秘密,它已經把你可能要用到的東西全都準備好了,一旦你引入了相關的jar包,對應的功能就會被啟用,應用啟動時,程序就會讀取相關的配置信息。程序首先會嘗試到配置文件中讀取相關的配置信息,如果配置文件中沒有,那么就會啟用配置的默認值。

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

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

相關文章

Django first lesson 環境搭建

pycharm ide集成開發環境 (提高開發效率) 解釋器/編譯器編輯器調試環境虛擬機連接 設置VirtualBox端口 操作1 操作2 點擊號添加,名稱為SSH,其中主機端口為物理機的端口,這里設置為1234,子系統端口為虛擬機的…

《Drupal實戰》——3.3 使用Views創建列表

3.3 使用Views創建列表 我們接著講解Views的設置,首先做一個簡單的實例。 3.3.1 添加內容類型“站內公告” 添加一個內容類型“站內公告”,屬性配置如表3-1所示。 為該內容類型設置Pathauto的模式news/[node:nid],并且我們在這里將節點類型…

c語言函數編正切余切運算,淺談正切函數與余切函數的應用

九年義務教育三年制初級中學“數學”課本中,對正切函數和余切函數的定義是這樣下的:在RtABC中,∠C=90,a&#…

wget命令下載文件

wget -r -N -l -k http://192.168.99.81:8000/solrhome/ 命令格式: wget [參數列表] [目標軟件、網頁的網址] -V,–version 顯示軟件版本號然后退出; -h,–help顯示軟件幫助信息; -e,–executeCOMMAND 執行一個 “.wgetrc”命令 -o,–output…

idea mybatis generator插件_SpringBoot+MyBatis+Druid整合demo

最近自己寫了一個SpringBootMybatis(generator)druid的demo1. mybatisgenerator逆向工程生成代碼1. pom文件pom文件添加如下內容,引入generator插件org.mybatis.generator mybatis-generator-maven-plugin 1.3.5 mysql …

vr格式視頻價格_如何以100美元的價格打造自己的VR耳機

vr格式視頻價格by Maxime Coutte馬克西姆庫特(Maxime Coutte) 如何以100美元的價格打造自己的VR耳機 (How you can build your own VR headset for $100) My name is Maxime Peroumal. I’m 16 and I built my own VR headset with my best friends, Jonas Ceccon and Gabriel…

python_裝飾器

# 裝飾器形成的過程 : 最簡單的裝飾器 有返回值得 有一個參數 萬能參數# 裝飾器的作用# 原則 :開放封閉原則# 語法糖:裝飾函數名# 裝飾器的固定模式 import time # time.time() # 獲取當前時間 # time.sleep() # 等待 # 裝飾帶參數的裝飾器 def timer…

歐洲的數據中心與美國的數據中心如何區分?

人會想到這意味著,在歐洲和北美的數據中心的設計基本上不會有大的差異。不過,一些小的差異是確實存在的。您可能想知道為什么你需要了解歐洲和北美的數據中心之間的差異,這對你的公司有幫助嗎?一個設計團隊往往能從另一個設計團隊那里學到東…

老農過河

java老農過河問題解決 http://www.52pojie.cn/thread-550328-1-1.html http://bbs.itheima.com/thread-141470-1-1.html http://touch-2011.iteye.com/blog/1104628 轉載于:https://www.cnblogs.com/wangjunwei/p/6032602.html

python isalnum函數_探究Python中isalnum()方法的使用

探究Python中isalnum()方法的使用 isalnum()方法檢查判斷字符串是否包含字母數字字符。 語法 以下是isalnum()方法的語法: str.isa1num() 參數 NA 返回值 如果字符串中的所有字符字母數字和至少有一個字符此方法返回 true,否則返回false。 例子 下面的例…

docker快速入門_Docker標簽快速入門

docker快速入門by Shubheksha通過Shubheksha Docker標簽快速入門 (A quick introduction to Docker tags) If you’ve worked with Docker even for a little while, I bet you’ve come across tags. They often look like “my_image_name:1” where the part after the col…

動態規劃算法——最長上升子序列

今天我們要講的是最長上升子序列(LIS)。【題目描述】給定N個數,求這N個數的最長上升子序列的長度。【樣例輸入】      【樣例輸出】7        42 5 3 4 1 7 6那么什么是最長上升子序列呢? 就是給你一個序列…

如何快速掌握一門新技術/語言/框架

IT行業中的企業特點是都屬于知識密集型企業。這種企業的核心競爭力與員工的知識和技能密切相關。而如果你在企業中扮演的是工程師的角色的話,那么 你的核心競爭力就是IT相關的知識與技能的儲備情況。而眾所周知,IT行業是一個大量產生新知識的地方&#x…

c語言今天星期幾問題,C語言輸入今天星期幾

滿意答案迷茫03222015.07.24采納率&#xff1a;55% 等級&#xff1a;9已幫助&#xff1a;665人123456789101112131415161718192021#include<stdio.h>int main(void){ enum weekday{ sun, mon, tue, wed, thu, fri, sat }; int n; printf("輸入星期數(0-…

備忘錄模式 詳解

定義 在不破壞封裝性的前提下&#xff0c;捕獲一個對象的內部狀態&#xff0c;并在該對象之外保存這個狀態&#xff1b; 行為型模式 角色 發起人角色&#xff08;Originator&#xff09;&#xff1a;記錄當前時刻的內部狀態&#xff0c;負責定義哪些屬于備份范圍的狀態&#xf…

dll oem證書導入工具_技術干貨 | 惡意代碼分析之反射型DLL注入

歡迎各位添加微信號&#xff1a;qinchang_198231 加入安全 交流群 和大佬們一起交流安全技術01技術概要這是一種允許攻擊者從內存而非磁盤向指定進程注入DLL的技術&#xff0c;該技術比常規的DLL注入更為隱蔽&#xff0c;因為除了不需要磁盤上的實際DLL文件之外&#xff0c;它…

像程序員一樣思考_如何像程序員一樣思考-解決問題的經驗教訓

像程序員一樣思考by Richard Reis理查德里斯(Richard Reis) 如何像程序員一樣思考-解決問題的經驗教訓 (How to think like a programmer — lessons in problem solving) If you’re interested in programming, you may well have seen this quote before:如果您對編程感興趣…

CF908G New Year and Original Order 數位DP

傳送門 看到數據范圍到\(10^{700}\)毫無疑問數位DP。那么我們最重要的問題是如何有效地維護所有數位排序之后的數的值。 對于某一個數\(x\)&#xff0c;設\(f_{x,i} (i \in [1,9])\)表示\(x\)中的所有數位的值\(\geq i\)的數位數量&#xff0c;比如說\(f_{6345982 , 7} 2 , f_…

銳捷亮相GITC:請互聯網企業為我點個贊!

【51CTO.com原創稿件】GITC全球互聯網技術大會已成功舉辦四屆&#xff0c;今年的會議現場依然是摩肩接踵圍觀者眾。圍繞互聯網熱點技術&#xff0c;眾人根據云、大數據、安全、運維、基礎架構的不同主題&#xff0c;各自聚成小圈子展開深入交流。 銳捷的展位在主會場的內側&…

c語言匯編混合編程方法,C語言和匯編語言混合編程方法

摘要&#xff1a; C語言是一種高級的面向過程的開發語言&#xff0c;匯編語言是一種低級的面向機器的編程語言。兩者在程序設計開發方面各有優劣&#xff0c;目前兩者的混合編程得到了廣泛的應用。本文通過具體的實例&#xff0c;說明了混合編程的基本方法&#xff0c;為C語言應…