SpringBoot的自動裝配機制


1,基於你對於Springboot的理解,描述一下什么是Springboot?

    springboot框架是為了能夠幫助spring開發者快速高效的構建一個基於spring框架及spring生態體系的應用的解決方案,它是對“約定優於配置”這個理念下的一個最佳實現方案,因此它是一個服務於框架的框架,服務的范圍是簡化配置文件。

2,約定優於配置指的是什么?

    (1),maven目錄:默認打包方式為jar,默認新建好了resources資源文件夾
    (2),spring-boot-web-start:包含了webmvc相關的依賴以及內嵌了tomcat容器,使得構建一個web應用更加簡單
    (3),默認提供了application.properties/yml文件
    (4),默認通過spring.profiles.active屬性來決定運行環境時讀取的配置文件
    (5),EnableAutoConfiguration默認對於依賴的start進行自動裝配

3,@SpringBootApplication由哪幾個注解組成,這幾個注解分別表示什么作用?

    (1),Configuration:將一個類申明為一個IoC容器配置類,該類中任何標注了@Bean的方法,它的返回值都會作為Bean定義注冊到Spring容器中,方法名默認稱為這個Bean的id
    (2),ComPonentScan:默認掃描當前包下的被@Component、@Repository、@Service、@Controller標識的類到IoC容器中。
    (3),EnableAutoConfiguration:幫助springboot將所有符合條件的configuration配置加載到springboot創建的IoC容器中。其實這里借助了spring框架提供的一個工具類:SpringFactoriesLoader的支持,以及用到了spring提供的條件注解Conditional
    分析:我們發現它有一個Import注解,那么這個注解是干嘛的呢?
            第一:基於普通的Bean或者帶有Configuration注解的Bean進行注入
            第二:實現ImportSelector接口進行動態注入
            第三:實現ImportBeanDefinitionRegistrar接口進行動態注入


4,springboot自動裝配的實現原理

    我理解的自動裝配是:其實EnableAutoConfiguration上有個Import注解,這個注解里面包含了一個實現了ImportSelector的類,在它里面的selectImports方法可以選擇注入需要的Bean,
    分析塔源碼可以看到,
    第一步:掃描META-INF/spring-autoconfigure-metadata.properties文件,它里面定義了很多的Conditional條件,例如ConditionalOnClass
    第二部:掃描META-INF/spring.factories,結合前面掃描到的進行過濾,原因是很多@Configuration其實是依托於其它的框架來加載的,如果當前classpath下沒有相關的依賴,則意味着這些類沒必要加載,所以通過這種條件過濾可以有效的減少@Configuration類的數量從而降低啟動時間。

5,springboot中的spi機制的原理

     很多開源框架庫里都直接或間接使用了Java 的SPI機制。比如Spring就有類似的SPI機制,通過SpringFactoriesLoader代替JDK中ServiceLoader,通過META-INF/spring.factories文件代替META-INF/service目錄下的描述文件,具體實現步驟不同,但原理都是使用Java 的反射機制。META-INF/spring.factories文件,根據key來加載對應的類到springIoC容器中。
    
  





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM