SpringBoot自动配置AutoConfiguration核心流程源码解析

SpringBoot自动配置

@SpringBootApplication包含@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan、@ConfigurationPropertiesScan

SpringApplication.run启动流程中与自动配置相关流程:

  1. SpringApplication启动

    org.springframework.boot.SpringApplication#run(java.lang.Class<?>, java.lang.String…)

  2. 创建ApplicationContext

    org.springframework.boot.SpringApplication#createApplicationContext

  3. 注册ConfigurationClassPostProcessor

    org.springframework.context.annotation.AnnotationConfigUtils#registerAnnotationConfigProcessors(org.springframework.beans.factory.support.BeanDefinitionRegistry)

  4. refresh invoke BeanFactoryPostProcessor

    org.springframework.context.support.AbstractApplicationContext#invokeBeanFactoryPostProcessors

  5. postProcess @Configuration

    org.springframework.context.annotation.ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry

  6. process启动类SpringApplication配置类

    org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass

  7. ComponentSacn,默认扫描启动类包路径

    org.springframework.context.annotation.ComponentScanAnnotationParser#parse

  8. process imports

    org.springframework.context.annotation.ConfigurationClassParser#processImports

  9. 解析@SpringBootApplication注解的Imports,包括AutoConfigurationImportSelector
    -org.springframework.context.annotation.ConfigurationClassParser#processImports

    • org.springframework.boot.autoconfigure.AutoConfigurationPackages$Registrar
    • org.springframework.boot.autoconfigure.AutoConfigurationImportSelector
    • org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar
    • org.springframework.boot.context.properties.ConfigurationPropertiesScanRegistrar
  10. 处理ImportSelector
    org.springframework.context.annotation.ConfigurationClassParser.DeferredImportSelectorHandler#process

  11. 加载EnableAutoConfiguration扩展点
    org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.AutoConfigurationGroup#process


版权声明:本文为laim3原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。