Spring源码情操陶冶-AbstractApplicationContext
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-ContextLoader
约束:本文指定contextClass为默认的XmlWebApplicationContext
AbstractApplicationContext#refresh()
简单看下refresh()方法内罗列的一系列方法,代码清单如下
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// Prepare this context for refreshing.
prepareRefresh();
// Tell the subclass to refresh the internal bean factory.
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// Prepare the bean factory for use in this context.
prepareBeanFactory(beanFactory);
try {
// Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory);
// Invoke factory processors registered as beans in the context.
invokeBeanFactoryPostProcessors(beanFactory);
// Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory);
// Initialize message source for this context.
initMessageSource();
// Initialize event multicaster for this context.
initApplicationEventMulticaster();
// Initialize other special beans in specific context subclasses.
onRefresh();
// Check for listener beans and register them.
registerListeners();
// Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory);
// Last step: publish corresponding event.
finishRefresh();
}
catch (BeansException ex) {
// Destroy already created singletons to avoid dangling resources.
destroyBeans();
// Reset 'active' flag.
cancelRefresh(ex);
// Propagate exception to caller.
throw ex;
}
}
}
针对上述的代码逻辑,为了避免代码的凌乱以及放在同篇文章文字过长,遂作如下链接导航
AbstractApplicationContext#prepareRefresh
刷新准备工作,@prepareRefreshAbstractApplicationContext#obtainFreshBeanFactory
涉及解析spring配置文件并封装为BeanDefinition对象保存至beanFactory中,@obtainFreshBeanFactoryAbstractApplicationContext#prepareBeanFactory
beanFactory的准备工作,设置context的属性配置,@prepareBeanFactoryAbstractApplicationContext#postProcessBeanFactory
主要添加ServletContextAwareProcessor处理类,@postProcessBeanFactoryAbstractApplicationContext#invokeBeanFactoryPostProcessors
执行BeanDefinitionRegistryPostProcessors/BeanFactoryPostProcessors相关beans,@invokeBeanFactoryPostProcessorsAbstractApplicationContext#registerBeanPostProcessors
注册所有实现BeanPostProcessor的接口bean到beanFactory的内部属性beanPostProcessors集合中,@registerBeanPostProcessorsAbstractApplicationContext#initMessageSource
初始化资源配置,@initMessageSourceAbstractApplicationContext#initApplicationEventMulticaster
初始化ApplictionEventMulticaster广播事件类,@initApplicationEventMulticasterAbstractApplicationContext#onRefresh
初始化themeSource,@onRefreshAbstractApplicationContext#registerListeners
注册ApplicationListener beans到ApplictionEventMulticaster广播集合,@registerListenersAbstractApplicationContext#finishBeanFactoryInitialization
实例化所有的非lazy-init类型的beans,@finishBeanFactoryInitializationAbstractApplicationContext#finishRefresh
完成刷新,并执行ContextRefreshedEvent事件,该事件涉及spring mvc,@finishRefresh
结束语
阅读源码的目的是为了了解其运行的机制,但可能涵盖的内容过广,可以对有兴趣的地方进行深刻的源码追踪,并理解其中的代码设计,不为是一件快乐的事情
Spring源码情操陶冶-AbstractApplicationContext的更多相关文章
- Spring源码情操陶冶-AbstractApplicationContext#finishBeanFactoryInitialization
承接前文Spring源码情操陶冶-AbstractApplicationContext#registerListeners 约定web.xml配置的contextClass为默认值XmlWebAppl ...
- Spring源码情操陶冶-AbstractApplicationContext#registerListeners
承接前文Spring源码情操陶冶-AbstractApplicationContext#onRefresh 约定web.xml配置的contextClass为默认值XmlWebApplicationC ...
- Spring源码情操陶冶-AbstractApplicationContext#onRefresh
承接前文Spring源码情操陶冶-AbstractApplicationContext#initApplicationEventMulticaster 约定web.xml配置的contextClass ...
- Spring源码情操陶冶-AbstractApplicationContext#initApplicationEventMulticaster
承接前文Spring源码情操陶冶-AbstractApplicationContext#initMessageSource 约定web.xml配置的contextClass为默认值XmlWebAppl ...
- Spring源码情操陶冶-AbstractApplicationContext#initMessageSource
承接前文Spring源码情操陶冶-AbstractApplicationContext#registerBeanPostProcessors 约定web.xml配置的contextClass为默认值X ...
- Spring源码情操陶冶-AbstractApplicationContext#registerBeanPostProcessors
承接前文Spring源码情操陶冶-AbstractApplicationContext#invokeBeanFactoryPostProcessors 瞧瞧官方注释 /** * Instantiate ...
- Spring源码情操陶冶-AbstractApplicationContext#invokeBeanFactoryPostProcessors
阅读源码有利于陶冶情操,承接前文Spring源码情操陶冶-AbstractApplicationContext#postProcessBeanFactory 约定:web.xml中配置的context ...
- Spring源码情操陶冶-AbstractApplicationContext#postProcessBeanFactory
阅读源码有利于陶冶情操,承接前文Spring源码情操陶冶-AbstractApplicationContext#prepareBeanFactory 约定:web.xml中配置的contextClas ...
- Spring源码情操陶冶-AbstractApplicationContext#prepareBeanFactory
阅读源码有助于陶冶情操,本文承接Spring源码情操陶冶-AbstractApplicationContext#obtainFreshBeanFactory 瞧瞧官方注释 /** * Configur ...
- Spring源码情操陶冶-AbstractApplicationContext#obtainFreshBeanFactory
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-AbstractApplicationContext 约束: 本文指定contextClass为默认的XmlWebApplicati ...
随机推荐
- Mac OS X 安装后的简单设置
让Mac拥有类似apt-get的功能--安装Homebrew Homebrew是一个包管理器,用于在Mac上安装一些OS X没有的UNIX工具(比如著名的wget). 国内下载地址:http://ww ...
- 手动添加git到目录右键菜单
1.通过在"运行"中输入'regedit',打开注册表. 2.找到[HKEY_CLASSES_ROOT\Directory\Background]. 3.在[Backgroun ...
- Mac远程连接windows报错“证书或相关链无效,是否仍要连接到此计算机”的处理办法。
这个主要是因为策略组设置的问题.详细的设置方法如下: 本地计算机策略>计算机配置>管理模板>windows组件>远程桌面服务>远程桌面会话主机>安全>远程(R ...
- JS获取浏览器类型和版本号
JS获取浏览器类型和版本号,增加了IE11的判断. 2015/7/5更新: 简化代码逻辑 var zbrowser = {} var ua = navigator.userAgent.toLowerC ...
- IT学习网站
网站 网站定位 http://www.51cto.com/ 中国领先的IT技术网站. http://www.iteye.com/ 内容齐全,功能丰富的中文IT技术门户和社区网站. http://www ...
- java中的注解总结
1. 什么是注解 注解是java5引入的特性,在代码中插入一种注释化的信息,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解.注解也叫元数据(meta data).这些注解信 ...
- github用法小结
共享仓库 bare 裸仓库 生成裸仓库时必须以.git结尾. 仓库就相当于一个服务器 ### 创建远程仓库 1. 创建以.git结尾的目录mkdir repo.git 2 ...
- ubuntu 16.04.2 源码安装gitlab并且利用runner持续集成
参考原档:https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md#using-https 本章只 ...
- js返回顶部封装 简洁
js返回顶部封装 简洁: 加入html页面body最后面即可. <script> a(); function a() { $(function() { if ($(".j-to- ...
- H5学习第二周
怎么说,在各种感觉中h5学习的第二周已经过来了,先总结一下,感觉学习h5是一件让我爱恨交加的事,学会一些新的知识并把它成功运行出来的时候是非常激动和兴奋的,但是有时候搞不懂一个标签或者属性的时候,就有 ...