springboot

springboot

springboot

 springboot

 自动装配加载
    1 refresh()
    2 invokeBeanFactoryPostProcessors(beanFactory)
    3 PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors())
    4 ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(beanFactory)
    5 processConfigBeanDefinitions(beanFactory)
        5.1 找到启动配置类,App
    6 创建 ConfigurationClassParser类=》配置解析类
    7 ConfigurationClassParser.parse(candidates)=>解析启动类
    8 processConfigurationClass(ConfigurationClass ) 处理配置类
    9 doProcessConfigurationClass(ConfigurationClass configClass, SourceClass sourceClass) 真正的处理配置类
        =》这个方法比较重要
            =》1 处理配置类中配置的 @PropertySource
            =》2 处理配置类中配置的 @ComponentScan 如果没有配置默认扫描当前类路径下的所有类,并将其注册到beanFactory中,
                    =》如果扫描的类也是一个配置类,会递归processConfigurationClass(ConfigurationClass) 从而加载所有类的BeanDefine到beanFactory中
            =》3 处理配置类中的 @Import
                    => processImports()此方法会处理“配置解析类”的DeferredImportSelectorHandler属性,这里是自动装配的关键
            =》4 处理配置类的@ImportResource
            =》5 处理配置类中的@Bean
    10 DeferredImportSelectorHandler.process()
        =》此时会处理自动装配,通过一系列的处理最终会调用AutoConfigurationImportSelector.getAutoConfigurationEntry()方法来加载spring.fatories中的”org.springframework.boot.autoconfigure.EnableAutoConfiguration“所对应的值
        =》配置类加载完成之后 会循环遍历配置类 然后调用processConfigurationClass(onfigurationClass)方法处理配置类
    11 第9 10 会将所有的配置类都加载到“配置解析类(onfigurationClassParser)”的configurationClasses的集合中
    12 创建reader ( ConfigurationClassBeanDefinitionReader) 对象
    14 reader.loadBeanDefinitions(configurationClasses)加载所有的配置类
        =》遍历配置类 将配置类中涉及的相关类的BeanDefine注册到beanFatory中



DispatchServlet是如何创建的?
  在spring.factories中配置了“DispatcherServletAutoConfiguration”配置类,通过自动装配原理,扫码该配置类来创建DispatchServlet实例
DispatchSerlet中的ApplicatinContext是如何创建的?
  在实例化DispatchServlet的时候,由”ApplicationContextAwareProcessor“这个beanPostProcess处理类给起赋值的