zoukankan      html  css  js  c++  java
  • 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处理类给起赋值的
  • 相关阅读:
    SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
    远程数据同步的三种方法
    粗俗易懂的SQL存储过程在.NET中的实例运用之二
    SSIS脚本组件的代码
    浅谈C# StackTrace 类的实例说明
    解决了:无法加载文件或程序集'stdole, Version=7.0.3300.0'
    收藏: .NET中类型的转换
    WCF 实例 —— Android 短信助手 (WCF + Android)
    粗俗易懂的SQL存储过程在.NET中的实例运用
    此发送邮件的代码对吗?
  • 原文地址:https://www.cnblogs.com/Tony100/p/13411343.html
Copyright © 2011-2022 走看看