springboot笔记

xxApplicationContext 上下文,持有xxBeanFactory 的引用,bean相关操作委托给容器。

xxBeanFactory 真正的容器,

关键词: SmartInitializingSingleton

1.准备

从spring.factory文件中获取ApplicationContextInitializer、与SpringApplicationRunListener并初始化;

new SpringApplicationRunListeners事件发布器,发布starting事件;

新建容器(ConfigurableApplicationContext)。

2.准备容器

1.设置容器ConfigurableApplicationContext的环境、资源加载器、类加载器等

向beanFactory提前注入bean

执行ApplicationContextInitializer来设置ConfigurableApplicationContext

listeners.contextPrepared(context);

2.加载

listeners.contextLoaded(context);

3.刷新容器

spring refresh

1.获取容器beanFactory

2.准备容器:配置bean后置处理器、忽略项等

3.执行beanFactory后置处理器

目的是往beanFactory注册bean的定义(ConfigurationClassPostProcessor 解析@Configuration、@Bean,@Component,@ComponentScan,@Import,@ImportResource等注解,将这些bean的定义注入beanFactory;以及其它功能:配置bean后置处理器、忽略项等)。这些beanFactory后置处理器,有的来自:springBoot读取spring.factory的ApplicationContextInitializer项,这些ApplicationContextInitializer会被执行initialize方法,初始化ConfigurableApplicationContext容器,其中就包含配置新的bean后置处理器;有的来自spring中实现了BeanFactoryPostProcessor接口的bean。

4.配置BeanPostProcessor类型的bean到beanFactory容器

5.配置applicationEventMulticaster事件广播器到beanFactory容器

6.初始化web容器

7.注入监听器,发布arlyApplicationEvents事件

7.1 springboot启动时,配置到springApplication容器的监听器。读取spring.factory文件中的ApplicationListener项,实例化得到

7.2 类型是ApplicationListener类型的bean

8.完成所有剩余bean的注入

9.finishRefresh

清理resource缓存、执行bean(所有实现了Lifecycle接口的)的生命周期方法start()、发布ContextRefreshedEvent事件、清理其它缓存

4.执行ApplicationRunner.class、CommandLineRunner.class类型的bean

上一篇:「Spring-IoC」源码分析一获取bean信息


下一篇:Spring