在Springboot项目下面是如何组装Bean的(上)-启动流程概览

2021-06-06 03:05

阅读:554

标签:时间   base   and   sp1   contex   了解   ica   res   proc   

createApplicationContext完成后,加载了6个BeanDefinition,此时还没有实例化任何单例,由此可以知道BeanDefinition不是一下子把所有的都加载进来的,适当的时间加载对应的BeanDefinition

技术图片

 

prepareContext完成之后,把启动类的BeanDefinition也加载进来了,此时还创建了5个singleton的bean,由此可知Bean也不是统一把所有的bean创建出来的,适当的时间创建对应的bean

技术图片

技术图片

 

接下来的refreshContext(context)就是重头戏了,因为很多BeanDefinition和Bean创建都会在这里实现,refreshContext最终会调用AbstractApplicationContext#refresh方法:

技术图片

首先重点关注invokeBeanFactoryPostProcessors(beanFactory),执行完这个步骤后BeanDefinition从7个增加到123个,Singleton bean只是从5个增加到15个:

技术图片

技术图片

执行完registerBeanPostProcessors(beanFactory),BeanDefinition的数量没有变化,SingletonBean从15个增加到22个,到这里是不是大概可以判断想要研究BeanDefinition如何加载的,那应该主要关注前面那个步骤呢

技术图片


onRefresh执行完之后,Singleton bean从22个增加到59个,并且自定义Bean EchoServer也是在这个时候创建的。

技术图片

 

finishBeanFactoryInitialization(beanFactory);执行完之后,Singleton Bean从59个增加到136个,入口的springbootApplication和自定义Bean EnableEchoServerFlag是在这个时候创建的。疑问:为什么EchoServer和EnableEchoServerFlag会在不同的时间创建呢?难道onRefresh是创建"主Bean",finishBeanFactoryInitialization是创建依赖的Bean? 

技术图片

 

以上分析可以知道,想要知道BeanDefinition是怎么创建的,应该主要关注invokeBeanFactoryPostProcessors(beanFactory);想要知道怎么实例化Bean的话,应该主要关注onRefreshfinishBeanFactoryInitialization

 

更多请了解一米源码公众号或https://itproject-manager.com/

在Springboot项目下面是如何组装Bean的(上)-启动流程概览

标签:时间   base   and   sp1   contex   了解   ica   res   proc   

原文地址:https://www.cnblogs.com/jovic/p/14617769.html


评论


亲,登录后才可以留言!