最近在公司弄spring升级,大概看了下spring3.0加载bean的代码,给自己总结下,有啥不妥,希望大牛指点。
spring加载bean主要在AbstractApplicationContext中的refresh()方法中实现,大概加载的流程如下:
prepareRefresh();//刷新前处理
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();//初始化beanFactory
prepareBeanFactory(beanFactory);//在应用上下文中准备beanfactory
postProcessBeanFactory(beanFactory);//beanfactory前处理
invokeBeanFactoryPostProcessors(beanFactory);//调用工厂后处理
registerBeanPostProcessors(beanFactory);//注册工厂后处理
initMessageSource();//初始化消息
initApplicationEventMulticaster();//初始化应用上下文事件广播器
onRefresh();//特殊bean的刷新
registerListeners();//注册监听器
finishBeanFactoryInitialization(beanFactory);//完成beanfactory的初始化
finishRefresh();//结束刷新
说明:
prepareRefresh:设置当前应用上下文为激活状态;
obtainFreshBeanFactory:刷新beanfactory,获取beanfactory;
prepareBeanFactory:设置classload,设置表达式解析器,设置属性编辑器(去掉了color解析器),添加 beanfactory后处理器。,添加解析器;
postProcessBeanFactory:beanfactory后处理器,不同的应用上下文设置不同的后处理器;
invokeBeanFactoryPostProcessors:调用beanfactory定义注册后解析器,调用beanfactory处理器,获得beanfactory后置处理器并分类,分别调用;
registerBeanPostProcessors:仿照invokeBeanFactoryPostProcessors注册beanfactory后处理器;
initApplicationEventMulticaster();初始化应用上下文事件广播器;
registerListeners:把上下文事件添加到上下文事件广播器中;
finishBeanFactoryInitialization:实例化所有非延迟加载的单例;
finishRefresh:初始化生命周期,刷新生命周期,发布事件。
spring加载bean主要在AbstractApplicationContext中的refresh()方法中实现,大概加载的流程如下:
prepareRefresh();//刷新前处理
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();//初始化beanFactory
prepareBeanFactory(beanFactory);//在应用上下文中准备beanfactory
postProcessBeanFactory(beanFactory);//beanfactory前处理
invokeBeanFactoryPostProcessors(beanFactory);//调用工厂后处理
registerBeanPostProcessors(beanFactory);//注册工厂后处理
initMessageSource();//初始化消息
initApplicationEventMulticaster();//初始化应用上下文事件广播器
onRefresh();//特殊bean的刷新
registerListeners();//注册监听器
finishBeanFactoryInitialization(beanFactory);//完成beanfactory的初始化
finishRefresh();//结束刷新
说明:
prepareRefresh:设置当前应用上下文为激活状态;
obtainFreshBeanFactory:刷新beanfactory,获取beanfactory;
prepareBeanFactory:设置classload,设置表达式解析器,设置属性编辑器(去掉了color解析器),添加 beanfactory后处理器。,添加解析器;
postProcessBeanFactory:beanfactory后处理器,不同的应用上下文设置不同的后处理器;
invokeBeanFactoryPostProcessors:调用beanfactory定义注册后解析器,调用beanfactory处理器,获得beanfactory后置处理器并分类,分别调用;
registerBeanPostProcessors:仿照invokeBeanFactoryPostProcessors注册beanfactory后处理器;
initApplicationEventMulticaster();初始化应用上下文事件广播器;
registerListeners:把上下文事件添加到上下文事件广播器中;
finishBeanFactoryInitialization:实例化所有非延迟加载的单例;
finishRefresh:初始化生命周期,刷新生命周期,发布事件。