<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot自動裝配原理分析

          共 1829字,需瀏覽 4分鐘

           ·

          2020-07-28 17:30

          點擊上方藍色字體,選擇“標星公眾號”

          優(yōu)質(zhì)文章,第一時間送達


          66套java從入門到精通實戰(zhàn)課程分享



          先看看SpringBoot的主配置類:


          里面有一個main方法運行了一個run()方法,在run方法中必須要傳入一個被@SpringBootApplication注解的類。


          @SpringBootApplication


          SpringBoot應(yīng)用標注在某個類上說明這個類是SpringBoot的主配置類,SpringBoot就會運行這個類的main方法來啟動SpringBoot項目。


          那@SpringBootApplication注解到底是什么呢,點進去看看:


          發(fā)現(xiàn)@SpringBootApplication是一個組合注解。


          @SpringBootConfiguration


          先看看@SpringBootConfiguration注解:


          這個注解很簡單,表明該類是一個Spring的配置類。


          再進去看看@Configuration:


          說明Spring的配置類也是Spring的一個組件。


          @EnableAutoConfiguration


          這個注解是開啟自動配置的功能。


          先看看@AutoConfigurationPackage注解:


          這個注解是自動配置包,主要是使用的@Import來給Spring容器中導(dǎo)入一個組件 ,這里導(dǎo)入的是Registrar.class。


          來看下這個Registrar:


          就是通過這個方法獲取掃描的包路徑,可以debug看看:


          在這行代碼上打了一個斷點:


          啟動項目:


          進入斷點處:


          看看能否獲取掃描的包路徑:


          已經(jīng)獲取到了包路徑:



          那那個metadata是什么呢:


          可以看到是標注在@SpringBootApplication注解上的DemosbApplication,也就是我們的主配置類:



          說白了就是將主配置類(即@SpringBootApplication標注的類)的所在包及子包里面所有組件掃描加載到Spring容器。所以包名一定要注意。


          現(xiàn)在包掃描路徑獲取到了,那具體加載哪些組件呢,看看下面這個注解。


          @Import({AutoConfigurationImportSelector.class})


          @Import注解就是給Spring容器中導(dǎo)入一些組件,這里傳入了一個組件的選擇器:AutoConfigurationImportSelector。


          里面有一個selectImports方法,將所有需要導(dǎo)入的組件以全類名的方式返回;這些組件就會被添加到容器中。


          debug運行看看:


          會給容器中導(dǎo)入非常多的自動配置類(xxxAutoConfiguration);就是給容器中導(dǎo)入這個場景需要的所有組件,并配置好這些組件:




          有了自動配置類,免去了我們手動編寫配置注入功能組件等的工作。


          那他是如何獲取到這些配置類的呢,看看上面這個方法:



          會從META-INF/spring.factories中獲取資源,然后通過Properties加載資源:

          Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導(dǎo)入到容器中,自動配置類就生效,幫我們進行自動配置工作。以前我們需要自己配置的東西,自動配置類都幫我們完成了。


          J2EE的整體整合解決方案和自動配置都在spring-boot-autoconfigure-2.0.3.RELEASE.jar:


          比如看看WebMvcAutoConfiguration:


          都已經(jīng)幫我們配置好了,我們不用再單獨配置了:

          ————————————————

          版權(quán)聲明:本文為CSDN博主「Dongguabai」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

          原文鏈接:

          https://blog.csdn.net/Dongguabai/article/details/80865599


          ??? ?




          感謝點贊支持下哈?


          瀏覽 62
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91麻豆国产福利在线观看 | 亚洲欧美国产高清vA在线播放 | 艹逼网站| 亚洲色欧美另类 | 欧美在线成人网站 |