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 条评论
下一页