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