SpringBoot_自動配置初步認識

SpringBoot_自動配置 - 幕布
SpringBoot_自動配置
  • 一、SpringBoot 的核心註解:
    • @SpringBootApplication
      • 使用main()方法啓動的類,只有該註解。進入該註解如圖:
      • @SpringBootConfiguration:底層是@Configuration;
    • 1、@Configuration
      • 該註解用於JavaConfig中,被該註解標註的表示,該類是個配置類
    • 2、@ComponentScan
      • 自動掃描註解,掃描路徑下的組件或者Bean;@Controller/@Service/@Component/@Repository
    • 3、@EnableAutoConfiguration
      • 複合註解:自動載入應用程序所需要的所有默認配置。
      • 最關鍵的註解@Import({EnableAUtoConfigurationImportSelector.class}), 該註解的作用是幫助SpringBoot 應用將所有符合條件的@Configuration 配置都加載到當前SpringBoot 應用中
        • 實際上是掃描所有jar路徑下的META-INF/spring.factories,將其文件包裝成Properties對象,獲取key值爲EnableAutoConfiguration的數據,然後添加到容器裏。
      • @AutoConfigurationPackage,詳情如圖
      • Registrar 是 AutoConfigurationPackages 的內部類,方法 registerBeanDefinitions(),在默認的情況下就是將:主配置類(@SpringBootApplication)的所在包及其子包裏邊的組件掃描到Spring容器中。比如: Lambda 表達式中的@Data註解,都是由@AutoConfigurationPackage 註解掃描加載。
  • 二、SpringBoot 自動配置的流程:
    • 概括:
      • 通過 @EnableAutoConfiguration註解,從classpath 下搜索所有的META-INF/spring.factories 配置文件,並將EnableAutoConfiguration 對應的配置項通過反射實例化爲對應標註了@Configuration的Ioc容器配置類,然後彙總爲一個並加載到Ioc容器中。
    • 詳解:
      • @SpringBootApplication 註解爲核心,進入後依賴 @EnableAutoConfiguration註解,進入後依賴@Import註解,根據引入的類EnableAutoConfigurationImportSelector的父類 AutoConfigurationImportSelector,引入SpringFactoriesLoader類,加載所有的META-INF/spring.factories 配置文件。將EnableAutoConfiguration 對應的配置項通過反射實例化爲對應標註了@Configuration的Ioc容器配置類,然後彙總爲一個並加載到Ioc容器中。
  • 三、從源碼分析SpringBoot 自動配置的過程:
    • 1、創建SpringApplication 對象,如圖
    • 2、進入SpringApplication 的帶參構造方法,如圖
    • 3、初始化方法,initialize(),如圖
    • 4、通過getSpringFactoriesInstances()方法,實例化ApplicationContextInitializer、ApplicationListener,方法內部,如圖
    • 5、loadFactoryNames()方法,如圖
    • 6、在Spring-boot 和Spring-boot-autoconfig 的META-INF/spring.factories ,如圖
  • 四、實例
    • 比如Redis 的自動配置,使用如下:
      • 1、在pom文件中引入依賴;
      • 2、在application.yml 或者 application.properties 引入如下配置:
      • 3、 如此即可在項目中使用redis,集成非常簡單。
    • 原理:
      • 自動配置掃描了spring.factories ,找到如下所示:
        • @ConditionalOnClass註解: 如果classpath,依賴中含有JedisConnection, RedisOperations,Jedis 這三個類,則添加redis的自動配置。
    • 總結:
      • 根據jar包依賴,添加自動配置。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章