SpringBoot中的自動裝配原理解析
SpringBoot自動裝配
pom.xml
- spring-boot-dependencies:核心依賴在父工程中
- 我們在寫或者引入一些SpringBoot依賴的時候,不需要指定版本,因為有這些版本倉庫
啟動器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
- 啟動器:可以理解為SpringBoot的啟動場景
- spring-boot-starter-web會幫我們自動導(dǎo)入web環(huán)境所有的依賴
- SpringBoot會將所有的功能場景,都變成一個個啟動器
- 我們要使用什么功能,就只需要找到對應(yīng)的啟動器就可以了
主程序
可以看到主程序有中的@SpringBootApplication注解和run方法
SpringApplication.run(Application.class, args);這行代碼的意思是將SpringBoot應(yīng)用啟動
@SpringBootApplication標志這個類是一個SpringBoot的應(yīng)用
看@SpringBootApplication注解,發(fā)現(xiàn)它最后還是找到這個類的反射
protected Class<?> getSpringFactoriesLoaderFactoryClass() { return EnableAutoConfiguration.class; } //標注了@EnableAutoConfiguration這個注解的類
了解主啟動類怎么運行
SpringApplication.run分析
該方法主要分兩部分,一部分是SpringApplication的實例化,而是run方法的執(zhí)行
SpringApplication這個類做了以下四件事情
- 推斷應(yīng)用的類型是普通項目還是web項目
- 查找并初始化所有可用初始化器,設(shè)置到initializers屬性中
- 找出所有的應(yīng)用程序監(jiān)聽器,設(shè)置到listeners屬性中
- 推斷并設(shè)置main方法的定義類,找到運行的主類
Spring Boot 的自動裝配原理
Spring Boot 的自動裝配原理主要是基于 Spring 框架中的核心功能 —— @EnableAutoConfiguration
注解實現(xiàn)的。
當(dāng)我們在使用 Spring Boot 時,只需要添加相應(yīng)的依賴關(guān)系,一般情況下就可以自動完成配置和裝配,不需要手動編寫一大堆繁瑣的配置文件。這是因為 Spring Boot 在啟動過程中會自動檢測并加載對應(yīng)的配置類和 Bean,從而完成應(yīng)用程序中各模塊的自動裝配。
具體來說,當(dāng)我們向項目中添加依賴時,Spring Boot 會根據(jù)依賴的不同自動載入對應(yīng)的 Starter 包,然后在對應(yīng)的 Starter 包中查找并加載 Auto Configuration 類,最后將 Auto Configuration 類中定義的 Bean 注冊到 Spring 容器中。這些 Starter 包中通常都包含了一些默認的配置項,也可以通過配置文件或者 Java 代碼進行自定義配置。
Spring Boot 自動裝配技術(shù)和機制
主要用了以下幾個技術(shù)和機制:
- 條件注解:Spring Boot 中使用了大量的條件注解(Condition),通過判斷當(dāng)前應(yīng)用的運行環(huán)境、類路徑下是否有指定的依賴,以及配置文件中是否定義了相應(yīng)的屬性等條件,決定是否啟用某個配置項或 Bean 的實例化。這樣就可以根據(jù)不同的條件去自動裝配不同的組件。
- Spring Boot Starter:這是一種約定俗成的方式,它定義了一系列常用的 Maven 依賴,例如 spring-boot-starter-web、spring-boot-starter-data-jpa 等,每個 Starter 都預(yù)先定義了一些 Auto Configuration 類,可以根據(jù)需要進行引用和擴展。開發(fā)人員只需按需引入所需的 Starter 包即可,而不用手動添加一堆依賴。
- Auto Configuration:Spring Boot 官方提供了大量的 Auto Configuration 類,這些類會根據(jù)當(dāng)前應(yīng)用程序的運行環(huán)境和已有的依賴來自動裝配一些 Bean。例如,如果 classpath 中存在 Tomcat,則 Spring Boot 會為 Web 應(yīng)用自動配置 Tomcat 相關(guān)的 Bean。
- Spring Framework 的核心功能:Spring Boot 是在 Spring Framework 基礎(chǔ)之上的進一步封裝和擴展,所以 Spring Framework 中的一些核心功能,如依賴注入、AspectJ、AOP等,自然也被運用到了自動裝配中。
SpringBoot自動裝配原理結(jié)論
SpringBoot所有自動配置都是在啟動的時候掃描并加載:所有的自動配置類都在spring.factories中,但是不一定生效,需要判斷條件是否成立,只要導(dǎo)入了對應(yīng)的start,就有對應(yīng)的啟動器了,有了啟動器,我們自動裝配就會生效,然后就配置成功
SpringBoot自動裝配注解才是核心
到此這篇關(guān)于SpringBoot中的自動裝配原理解析的文章就介紹到這了,更多相關(guān)SpringBoot自動裝配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ IDEA遠程Debug Linux的Java程序,找問題不要只會看日志了(推薦)
這篇文章主要介紹了IntelliJ IDEA遠程Debug Linux的Java程序,找問題不要只會看日志了,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09如何利用SpringAOP的返回通知處理數(shù)據(jù)加密返回
這篇文章主要介紹了如何利用SpringAOP的返回通知處理數(shù)據(jù)加密返回,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2024-12-12關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別
這篇文章主要介紹了關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05詳解JAVA中的Collection接口和其主要實現(xiàn)的類
這篇文章主要介紹了JAVA中的Collection接口和其主要實現(xiàn)的類,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03