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的集合<br>它用来解决循环依赖<br>
singletonFactories
三级缓存,存放单实例Bean工厂的集合
registeredSingletons
singletonObjects
一级缓存,存放完全初始化好的Bean的集合<br>从这个集合中取出来的Bean可以立马返回<br>
beanDefinitionMap
收藏
0 条评论
下一页