SpringIOC Bean的初始化流程
2022-02-07 11:36:53 9 举报
SpringIOC的初始化流程
作者其他创作
大纲/内容
1.设置Spring的环境,取spring.profile中的变量2.获取系统环境变量和jvm进程的一些变量
ClassPathXmlApplicationContext(通过解析XML来加载Bean)
refresh
finishBeanFactoryInitialization
obtainFreshBeanFactory
postProcessBeanFactory
initApplicationEventMulticaster
initMessageSource
做一些准备工作,记录容器的启动时间、标记“已启动”状态、检查环境变量等
注册事件监听器,将BeanFactory中的所有ApplicationListen添加到ApplicationEventMulticaster事件广播器中,如果有早期应用事件直接发布(earlyApplicationEvents)
finishRefresh
注册 BeanPostProcessor 的实现类,将BeanFactory中的BeanPostProcessor(也是BeanDefinition)抽出来也是按照PriorityOrdered->Ordered->Other的顺序放入beanPostProcessors(List)中此接口有两个方法: postProcessBeforeInitialization 和 postProcessAfterInitialization分别会在Bean初始化之前和初始化之后得到执行
getEnvironment()
负责初始化所有的没有设置懒加载的singleton bean
invokeBeanFactoryPostProcessors
用placeholder中的变量值替换xml指定路劲中的占位符${}
prepareBeanFactory
prepareRefresh
registerListeners
这个方法主要为初始化当前 ApplicationContext 的事件广播器
初始化当前 ApplicationContext 的 MessageSource,有想了解国际化的相关知识可以深入研究一下
扩展点,留给ApplicationContext的子类实现
onRefresh
主要会设置BeanFactory的类加载器、添加几个 BeanPostProcessor、手动注册几个特殊的bean
setConfigLocations
resolveRequiredPlaceholders
1.BeanFactory(Application 的BeanFactory,如果已存在则销毁factory以及所有注册的bean)的初始化2.通过XML解析将定义的Bean全部转化为BeanDefinition(它里面包含了Bean指向的类、是否单例、是否懒加载、Bean的依赖关系等相关的属性)存入BeanFactory的beanDefinitionMap中
registerBeanPostProcessors
收藏
收藏
0 条评论
下一页