欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中的自動裝配原理解析

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

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è)類做了以下四件事情

  1. 推斷應(yīng)用的類型是普通項(xiàng)目還是web項(xiàng)目
  2. 查找并初始化所有可用初始化器,設(shè)置到initializers屬性中
  3. 找出所有的應(yīng)用程序監(jiān)聽器,設(shè)置到listeners屬性中
  4. 推斷并設(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程序,找問題不要只會看日志了(推薦)

    這篇文章主要介紹了IntelliJ IDEA遠(yuǎn)程Debug Linux的Java程序,找問題不要只會看日志了,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java?Maven?Settings配置參考教程

    Java?Maven?Settings配置參考教程

    這篇文章主要介紹了Java?Maven?Settings配置參考,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • java中使用map排序的實(shí)例講解

    java中使用map排序的實(shí)例講解

    在本篇文章里小編給大家整理了一篇關(guān)于java中使用map排序的實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Java本地緩存實(shí)現(xiàn)代碼示例

    Java本地緩存實(shí)現(xiàn)代碼示例

    這篇文章主要給大家介紹了關(guān)于Java本地緩存實(shí)現(xiàn)的相關(guān)資料,對于緩存的作用不言而喻,可以提高查詢效率,比去DB查詢的速度要快,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • struts2實(shí)現(xiàn)多文件上傳

    struts2實(shí)現(xiàn)多文件上傳

    這篇文章主要為大家詳細(xì)介紹了struts2實(shí)現(xiàn)多文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 如何利用SpringAOP的返回通知處理數(shù)據(jù)加密返回

    如何利用SpringAOP的返回通知處理數(shù)據(jù)加密返回

    這篇文章主要介紹了如何利用SpringAOP的返回通知處理數(shù)據(jù)加密返回,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-12-12
  • 關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別

    關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別

    這篇文章主要介紹了關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java TCP協(xié)議通信超詳細(xì)講解

    Java TCP協(xié)議通信超詳細(xì)講解

    TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission Control Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層
    2022-09-09
  • 詳解JAVA中的Collection接口和其主要實(shí)現(xiàn)的類

    詳解JAVA中的Collection接口和其主要實(shí)現(xiàn)的類

    這篇文章主要介紹了JAVA中的Collection接口和其主要實(shí)現(xiàn)的類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java原生動態(tài)生成驗(yàn)證碼

    java原生動態(tài)生成驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了java原生動態(tài)生成驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評論