看spring源码,spring源码解读,博客整理
来源:互联网 发布:cr2什么软件打开 编辑:程序博客网 时间:2024/06/06 02:45
Spring源码情操陶冶-ContextLoaderListener
ContextLoaderListener extends ContextLoader implements ServletContextListener
contextInitialized --->initWebApplicationContext();
ApplicationContext体系:
Spring源码情操陶冶-ContextLoader
WebApplicationContext initWebApplicationContext(ServletContext servletContext)
initWebApplicationContext方法里面有createWebApplicationContext方法 和configureAndRefreshWebApplicationContext 方法 。
createWebApplicationContext创建一个空的WebApplicationContext(XmlWebApplicationContext),configureAndRefreshWebApplicationContext方法为WebApplicationContext读取相应的配置并且刷新context对象。
configureAndRefreshWebApplicationContext方法包括指定contextConfigLocationSpring配置文件位置、给应用一个id倘若指定了contextId属性、 refresh()方法 ConfigurableWebApplicationContext.refresh()
ConfigurableWebApplicationContext extends WebApplicationContext, ConfigurableApplicationContext
AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext, DisposableBean
ConfigurableApplicationContext 接口有void refresh() throws BeansException, IllegalStateException; 抽象方法。
只有一个实现类实现了方法
所以 ConfigurableWebApplicationContext.refresh() 调用的是 AbstractApplicationContext的refresh()方法。
Spring源码情操陶冶-AbstractApplicationContext refresh()
refresh里面有这几个方法:
AbstractApplicationContext#prepareRefresh
刷新准备工作,@prepareRefresh
AbstractApplicationContext#obtainFreshBeanFactory
涉及解析spring配置文件并封装为BeanDefinition对象保存至beanFactory中,@obtainFreshBeanFactory
AbstractApplicationContext#prepareBeanFactory
beanFactory的准备工作,设置context的属性配置,@prepareBeanFactory
AbstractApplicationContext#postProcessBeanFactory
主要添加ServletContextAwareProcessor处理类,@postProcessBeanFactory
AbstractApplicationContext#invokeBeanFactoryPostProcessors
执行BeanDefinitionRegistryPostProcessors/BeanFactoryPostProcessors相关beans,@invokeBeanFactoryPostProcessors
AbstractApplicationContext#registerBeanPostProcessors
注册所有实现BeanPostProcessor的接口bean到beanFactory的内部属性beanPostProcessors集合中,@registerBeanPostProcessors
AbstractApplicationContext#initMessageSource
初始化资源配置,@initMessageSource
AbstractApplicationContext#initApplicationEventMulticaster
初始化ApplictionEventMulticaster广播事件类,@initApplicationEventMulticaster
AbstractApplicationContext#onRefresh
初始化themeSource,@onRefresh
AbstractApplicationContext#registerListeners
注册ApplicationListener beans到ApplictionEventMulticaster广播集合,@registerListeners
AbstractApplicationContext#finishBeanFactoryInitialization
实例化所有的非lazy-init类型的beans,@finishBeanFactoryInitialization
AbstractApplicationContext#finishRefresh
完成刷新,并执行ContextRefreshedEvent事件,该事件涉及spring mvc,@finishRefresh
Spring的BeanFactoryPostProcessor和BeanPostProcessor
(finishBeanFactoryInitialization() preInstantiateSingletons() getBean() doCreateBean() initializeBean())
configureAndRefreshWebApplicationContext方法之后WebApplicationContext对象已经完成
把WebApplicationContext对象赋给servletContext:
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,this.context);
至此,initWebApplicationContext完成。
- 看spring源码,spring源码解读,博客整理
- Spring RMI源码解读
- spring IOC源码解读
- spring beans源码解读
- spring 源码解读
- spring源码解读
- Spring源码解读顺序
- spring源码解读感想
- spring beans源码解读
- 【转】Spring源码解读
- spring 源码解读笔记
- Spring源码解读IOC
- spring kafka源码解读
- spring beans源码解读
- 源码解读Spring IOC原理
- Spring 源码解读 推荐流程
- spring-session源码解读-1
- spring-session源码解读-2
- 提取文档中的指定内容
- 工作五年还在一线写代码丢人吗
- Snackbar使用详解
- hydra框架之责任链设计模式
- Ubuntu16.04---腾讯NCNN框架入门到应用
- 看spring源码,spring源码解读,博客整理
- 使用ajax提交表单有很多优势 (下面是一个上传文件的实例 new FormData class)
- 利用Aforge做的摄像监控程序(带视频差异录像)
- sqoop导入数据出错ERROR manager.SqlManager: Error executing statement: java.sql.SQLException: Access denied
- 在el表达式中引用变量进行比较
- Power of Matrix UVA
- Form表单生成数字、字母验证码_Ajax--------struts2
- 根据二叉树的先序和中序来重建二叉树-C++
- asp.net mvc在一个控制器中返回另外一个控制器的视图