最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中的自動裝配原理解析

 更新時間:2023年08月16日 09:33:18   作者:Sweb.  
這篇文章主要介紹了SpringBoot中的自動裝配原理解析,自動裝配就是指 Spring 容器在不使用<constructor-arg>和<property>標(biāo)簽的情況下,可以自動裝配(autowire)相互協(xié)作的Bean之間的關(guān)聯(lián)關(guān)系,將一個 Bean注入其他Bean的Property中,需要的朋友可以參考下

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標(biāo)志這個類是一個SpringBoot的應(yīng)用

看@SpringBootApplication注解,發(fā)現(xiàn)它最后還是找到這個類的反射

protected Class<?> getSpringFactoriesLoaderFactoryClass() {
    return EnableAutoConfiguration.class;
}
 //標(biāo)注了@EnableAutoConfiguration這個注解的類

了解主啟動類怎么運行

SpringApplication.run分析

該方法主要分兩部分,一部分是SpringApplication的實例化,而是run方法的執(zhí)行

SpringApplication這個類做了以下四件事情

  1. 推斷應(yīng)用的類型是普通項目還是web項目
  2. 查找并初始化所有可用初始化器,設(shè)置到initializers屬性中
  3. 找出所有的應(yīng)用程序監(jiān)聽器,設(shè)置到listeners屬性中
  4. 推斷并設(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 包中通常都包含了一些默認(rèn)的配置項,也可以通過配置文件或者 Java 代碼進(jìn)行自定義配置。

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ù)需要進(jìn)行引用和擴(kuò)展。開發(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ǔ)之上的進(jìn)一步封裝和擴(kuò)展,所以 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)文章

  • 使用Spring?Batch實現(xiàn)大數(shù)據(jù)處理的操作方法

    使用Spring?Batch實現(xiàn)大數(shù)據(jù)處理的操作方法

    通過使用Spring?Batch,我們可以高效地處理大規(guī)模數(shù)據(jù),本文介紹了如何配置和實現(xiàn)一個基本的Spring?Batch作業(yè),包括讀取數(shù)據(jù)、處理數(shù)據(jù)和寫入數(shù)據(jù)的全過程,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Java子類對象的實例化過程分析

    Java子類對象的實例化過程分析

    這篇文章主要介紹了Java子類對象的實例化過程,結(jié)合具體實例形式分析了java子類對象的實例化的步驟、原理、實現(xiàn)方法,需要的朋友可以參考下
    2019-09-09
  • java中ThreadLocal的基本原理

    java中ThreadLocal的基本原理

    本文講解了java中ThreadLocal的一些基本原理,文中關(guān)于ThreadLocal的原理講解的非常詳細(xì),感興趣的朋友一起看看吧
    2021-08-08
  • 關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析

    關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析

    這篇文章主要介紹了關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java Enum的簡單使用

    Java Enum的簡單使用

    這篇文章主要為大家詳細(xì)介紹了Java Enum的簡單使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Spring Data JPA 設(shè)置字段默認(rèn)值方式

    Spring Data JPA 設(shè)置字段默認(rèn)值方式

    這篇文章主要介紹了Spring Data JPA設(shè)置字段默認(rèn)值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java多線程編程之使用Synchronized塊同步方法

    java多線程編程之使用Synchronized塊同步方法

    synchronized塊來同步一個對象變量,也可以使用synchronized塊來同步類中的靜態(tài)方法和非靜態(tài)方法,下面使用Synchronized塊同步方法
    2014-01-01
  • Java中Lambda表達(dá)式用法介紹

    Java中Lambda表達(dá)式用法介紹

    本文詳細(xì)講解了Java中Lambda表達(dá)式的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 親手帶你解決Debug Fastjson的安全漏洞

    親手帶你解決Debug Fastjson的安全漏洞

    這篇文章主要介紹了親手帶你解決Debug Fastjson的安全漏洞,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Spring復(fù)雜對象創(chuàng)建的方式小結(jié)

    Spring復(fù)雜對象創(chuàng)建的方式小結(jié)

    這篇文章主要介紹了Spring復(fù)雜對象創(chuàng)建的三種方式,現(xiàn)在使用Spring如何創(chuàng)建這種類型的對象?Spring中提供了三種方法來創(chuàng)建復(fù)雜對象,需要的朋友可以參考下
    2022-01-01

最新評論

三都| 呼玛县| 霍州市| 建德市| 宾阳县| 天柱县| 玉树县| 淳化县| 开封市| 六安市| 锡林浩特市| 甘南县| 交口县| 满洲里市| 寿阳县| 黔西| 墨玉县| 荣昌县| 南雄市| 安丘市| 井冈山市| 宁陵县| 金坛市| 镇沅| 永寿县| 淮安市| 聂拉木县| 柳林县| 景泰县| 清涧县| 依兰县| 东方市| 海城市| 年辖:市辖区| 小金县| 芮城县| 潮安县| 刚察县| 长沙市| 江达县| 乡宁县|