SpringBoot流程简化
2020-06-24 09:59:44   1  举报             
     
         
 AI智能生成
  SpringBoot2启动流程简化示意导图
    作者其他创作
 大纲/内容
  初始化Initializer、Listener等信息  
     执行Listener#starting()  
     准备环境    
     准备结束后执行Listener#environmentPrepared(environment)  
     创建ApplicationContext    
     AnnotatedBeanDefinitionReader    
     ConfigurationClassPostProcessor  
     AutowiredAnnotationBeanPostProcessor  
     ClassPathBeanDefinitionScanner  
     创建DefaultListableBeanFactory  
     准备环境    
     调用initializer的initialize方法  
     执行Listener#contextPrepared()  
     加载主启动类的BeanDefinition方法到IOC容器中  
     执行Listener#contextLoaded(context)  
     刷新Conetxt    
     初始化前的预处理  
     获取BeanFactory,加载所有bean的定义信息(未实例化)  
     BeanFactory的预处理配置  
     准备BeanFactory完成后进行的后置处理  
     执行BeanFactory创建后的后置处理器,注册Bean到Context中    
     触发属性beanFactoryPostProcessors的postProcessBeanDefinitionRegistry  
     循环获取容器中的BeanDefinitionRegistryPostProcessor类型的BeanDefinition(按照优先级)    
     解析@Import  
     解析@ComponentScan  
     解析@PropertySource  
     解析@ImportResource  
     解析@Bean  
     循环获取容器中的BeanFactoryPostProcessor类型的BeanDefinition(按照优先级)  
     注册Bean的后置处理器    
     循环获取容器中的BeanPostProcessor类型的BeanDefinition    
     添加时会创建实例  
     初始化MessageSource  
     初始化事件派发器  
     onRefresh()  
     注册监听器  
     实例化所有剩下的非延迟单例Bean    
     循环实例化bean    
     getSingleton    
     标记当前bean  
     createBean    
     给BeanPostProcessors一个机会,来返回代理而不是目标bean实例  
     doCreateBean    
     createBeanInstance    
     实例化Bean  
     MergedBeanDefinitionPostProcessor可以修改Bean的定义  
     缓存单例对象,以便能够解析循环引用  
     populateBean:属性赋值和自动注入    
     执行所有InstantiationAwareBeanPostProcessor的postProcessAfterInstantiation方法  
     通过名称注入  
     通过类别注入  
     拿InstantiationAwareBeanPostProcessor处理@Autowired、@Value等注入  
     initializeBean:初始化Bean    
     注入Aware属性  
     后置处理器在做初始化之前的处理    
     一般BeanPostProcessor  
     CommonAnnotationBeanPostProcessor中的@PostConstruct   
     初始化Bean    
     InitializingBean  
     init-method  
     后置处理器在做初始化之后的处理  
     注册Bean的销毁方法,销毁方法在IOC容器关闭后再销毁  
     afterSingletonCreation  
     将这个创建好的Bean放到单实例Bean缓存区中  
     实例化后如果有bean实现了SmartInitializingSingleton,则调用afterSingletonsInstantiated  
     完成容器的创建工作    
     清除资源缓存(如扫描的ASM元数据)  
     初始化生命周期处理器  
     将刷新传播到生命周期处理器  
     发布容器刷新完成的事件,让监听器去回调各自的方法  
     MBean注册  
     清除缓存  
     刷新后置处理  
     执行Listener#started(context)  
     执行Listener#running(context)  
     重要接口    
     BeanDefinitionRegistryPostProcessor    
     postProcessBeanDefinitionRegistry  
     BeanFactoryPostProcessor    
     postProcessBeanFactory  
     InstantiationAwareBeanPostProcessor    
     postProcessBeforeInstantiation  
     postProcessAfterInstantiation  
     postProcessProperties  
     postProcessPropertyValues  
     MergedBeanDefinitionPostProcessor    
     postProcessMergedBeanDefinition  
     resetBeanDefinition  
     BeanPostProcessor    
     postProcessBeforeInitialization  
     postProcessAfterInitialization  
     InitializingBean    
     afterPropertiesSet  
     IOC属性    
     beanPostProcessors  
     singletonsCurrentlyInCreation    
     存放正在被创建的Bean的集合  
     earlySingletonObjects    
     二级缓存,存放创建好但没有初始化属性的Bean的集合
它用来解决循环依赖
  
    它用来解决循环依赖
 singletonFactories    
     三级缓存,存放单实例Bean工厂的集合  
     registeredSingletons  
     singletonObjects    
     一级缓存,存放完全初始化好的Bean的集合
从这个集合中取出来的Bean可以立马返回
  
    从这个集合中取出来的Bean可以立马返回
 beanDefinitionMap  
     
    收藏 
     
 
 
 
 
  0 条评论
 下一页
  
   
  
  
  
  
  
  
  
  
  
  
 