spring加载流程
2022-08-05 01:33:11 0 举报
spring加载图持续更新
作者其他创作
大纲/内容
包扫描逻辑+BeanDefinition生成
initMessageSource();国际化的功能
initApplicationEventMulticaster();事件发布注册功能
obtainFreshBeanFactory();主要的作用就是创建了一个BeanFactory——DefaultListableBeanFactory,进行BeanFactory的refresh,在这里会去调用子类的refreshBeanFactory方法,具体子类是怎么刷新的得看子类,然后再调用子类的getBeanFactory方法,重新得到一个BeanFactory;
registerBeanPostProcessors(beanFactory);BeanPostProcessor进行注册,在这一步就会把BeanFactory中所有的BeanPostProcessor找出来并实例化得到一个对象,并添加到BeanFactory中去(属性beanPostProcessors),最后再重新添加一个ApplicationListenerDetector对象(之前其实就添加了过,这里是为了把ApplicationListenerDetector移动到最后)
finishRefresh();
postProcessBeanFactory(beanFactory);提供给AbstractApplicationContext的子类进行扩展,具体的子类,可以继续向BeanFactory中再添加一些东西
prepareBeanFactory(beanFactory);设置beanFactory的类加载器
prepareRefresh(); i. 记录启动时间; ii. 可以允许子容器设置一些内容到Environment中 iii. 验证Environment中是否包括了必须要有的属性
onRefresh();提供给AbstractApplicationContext的子类进行扩展
finishBeanFactoryInitialization(beanFactory);完成BeanFactory的初始化,主要就是实例化非懒加载的单例Bean
实例化非懒加载的单例Bean
1、此时在BeanFactory中会存在一个BeanFactoryPostProcessor:ConfigurationClassPostProcessor,它也是一个BeanDefinitionRegistryPostProcessor2、 从BeanFactory中找到类型为BeanDefinitionRegistryPostProcessor的beanName,也就是ConfigurationClassPostProcessor, 然后调用BeanFactory的getBean方法得到实例对象3、 执行**ConfigurationClassPostProcessor的postProcessBeanDefinitionRegistry()**方法: a. 解析AppConfig类 b. 扫描得到BeanDefinition并注册 c. 解析@Import,@Bean等注解得到BeanDefinition并注册 d. 详细的看另外的笔记,专门分析了ConfigurationClassPostProcessor是如何工作的 e. 在这里,我们只需要知道在这一步会去得到BeanDefinition,而这些BeanDefinition中可能存在BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor,所以执行完ConfigurationClassPostProcessor的postProcessBeanDefinitionRegistry()方法后,还需要继续执行其他BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry()方法4、 执行其他BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry()方法5、 执行所有BeanDefinitionRegistryPostProcessor的**postProcessBeanFactory()方法6、 第二阶段7、从BeanFactory中找到类型为BeanFactoryPostProcessor的beanName,而这些BeanFactoryPostProcessor包括了上面的BeanDefinitionRegistryPostProcessor8、 执行还没有执行过的BeanFactoryPostProcessor的postProcessBeanFactory()方法到此,所有的BeanFactoryPostProcessor的逻辑都执行完了,主要做的事情就是得到BeanDefinition并注册到BeanFactory中
invokeBeanFactoryPostProcessors(beanFactory);
registerListeners();从BeanFactory中获取ApplicationListener类型的beanName,然后添加到ApplicationContext中的事件广播器applicationEventMulticaster中去,到这一步因为FactoryBean还没有调用getObject()方法生成Bean对象,所以这里要在根据类型找一下ApplicationListener,记录一下对应的beanName

收藏
0 条评论
下一页
为你推荐
查看更多