在web.xml文件中有

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListerner</listener-class>

</listener>

是通过类ContextLoaderListener来启动的,与ServletContext紧密相联,其实现了ServletContextListener接口,在contextInitialized中初始化上下文。ContextLoaderListener类图结构为

public void contextInitialized(ServletContextEvent event) {initWebApplicationContext(event.getServletContext());
}

在初始化根上下文时,如果根上下文已经初始化过,则抛出IllegalStateException异常。调用createWebApplicationContext来创建web上下文。用determineContextClass来决定使用哪个上下文,先判断servletcontext是否存在contextClass参数,如果有就使用这个作为上下文类,否则使用defaultStrategies获取属性为org.springframework.web.context.WebApplicationContext的值,而defaultStrategies是通过读取ContextLoader.properties文件内的内容。

protected WebApplicationContext createWebApplicationContext(ServletContext sc) {Class<?> contextClass = determineContextClass(sc);if (!ConfigurableWebApplicationContext.class.isAssignableFrom(contextClass)) {throw new ApplicationContextException("Custom context class [" + contextClass.getName() +"] is not of type [" + ConfigurableWebApplicationContext.class.getName() + "]");}return (ConfigurableWebApplicationContext) BeanUtils.instantiateClass(contextClass);
}protected Class<?> determineContextClass(ServletContext servletContext) {String contextClassName = servletContext.getInitParameter(CONTEXT_CLASS_PARAM);if (contextClassName != null) {try {return ClassUtils.forName(contextClassName, ClassUtils.getDefaultClassLoader());}catch (ClassNotFoundException ex) {throw new ApplicationContextException("Failed to load custom context class [" + contextClassName + "]", ex);}}else {contextClassName = defaultStrategies.getProperty(WebApplicationContext.class.getName());try {return ClassUtils.forName(contextClassName, ContextLoader.class.getClassLoader());}catch (ClassNotFoundException ex) {throw new ApplicationContextException("Failed to load default context class [" + contextClassName + "]", ex);}}
}

其时序图如下

XmlWebApplication类结构如下:

SpringMVC中IOC容器启动相关推荐

  1. .Net Core中IOC容器的使用

    本文由江北原创投稿,独家授权技术在于分享(公众号ID:sharecore),未经许可,不得转载. 作者:江北 打代码之前先说一下几个概念,那就是什么是IOC.DI.DIP 虽然网上讲这些的已经有很多了 ...

  2. Spring IOC 容器启动、Bean生命周期详解

    前言 在Spring IOC 和 AOP 概览中,简要介绍了IOC容器和AOP,没有深入IOC容器Bean的实例化,此文承接上文深入分析Bean的实例化过程.生命周期. Spring IOC的过程 S ...

  3. 关于Spring中IOC容器和AOP协同工作的原理理解

    1.在详细介绍 IOC 容器的工作原理前,这里先介绍一下实现 IOC 所用到的一些辅助类,包括BeanDefinition.BeanReference.PropertyValues.PropertyV ...

  4. Spring中IOC容器

    IOC入门案例思路分析 1.管理什么(Service和Dao) 2.如何将管理的对象存放到IOC容器(配置applicationContext.xml)第二步 3.将管理的对象存放到IOC容器,如何获 ...

  5. 【Spring源码】 Spring IoC容器启动之Bean创建流程

    上篇已经分析完refresh()中大部分方法,也已经把Bean解析成BeanDefinition注册到IoC容器中,refresh还剩下一个非常重要的方法,就是下面将要分析的:finishBeanFa ...

  6. Docker中Mysql容器启动

    一 下拉镜像 docker pull mysql:5.7 docker images查看镜像 二 运行镜像 1 运行镜像,如果不挂载路径运行执行以下就可以 docker run -id --name ...

  7. 【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式

    每篇一句 比你有钱的人一定会比你努力,而比你努力的人终有一天会比你有钱 前言 Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系.因此可以说Spring容器对Bean ...

  8. 手动实现Spring中的IOC容器

    注意:这就是一个用于学习理解Spring中IOC容器的简单例子!!!! 1.IOC容器实现的过程: 加载XML的配置文件,并且遍历文件中的标签 获取配置文件中单个Bean的ID和Class属性,然后根 ...

  9. [Spring 深度解析]第6章 Spring的IoC容器系列

    6. Spring的IoC容器系列 ​ IoC容器为开发者管理对象之间的依赖关系提供了很多便利和基础服务.有许多IoC容器供开发者选择,SpringFramework的IoC核心就是其中一个,它是开源 ...

最新文章

  1. 确认对话框ConfirmDialog和选择对话框OptionDialog
  2. 数学--数论--Hdu 5793 A Boring Question (打表+逆元)
  3. 对象文件格式分析工具: objdump, nm,ar
  4. 第一百一十八期:运行 JavaScript 代码片段的 20 种工具
  5. Loguru:Python 日志终极解决方案
  6. c#给定二维数组按升序排序_在数组中按升序对数字进行排序| 8086微处理器
  7. 12岁上大学,23岁获博士学位,这位天才科学家正式加盟清华
  8. Spark的StaticMemoryManager
  9. mysql存储过程 大小写_MySQL数据记录大小写敏感问题【转】
  10. 凸优化学习笔记(四):对偶性、KKT 条件、敏感性分析
  11. echarts地图省市坐标
  12. python日历模块_日历模块---calendar
  13. python基础读后感_Python基础教程【读书笔记】 - 2016/7/4
  14. Linux Capability探索实验
  15. CSOL NST1007 V1.0 完整汉化版发布
  16. 计算机无法连接到打印机主机,电脑连接不上打印机怎么办
  17. http的幂等性及幂等性
  18. 加工制造业采购商城平台:实现加工制造业采购自动化、协同化管理
  19. 基于蒙特卡诺和拉格朗日乘子法的电动车调度【有序、无序充放电】【Matlab代码】
  20. TMS320C6678开发板( DSP+Zynq )RTOS综合功能案例,嵌入式必看!

热门文章

  1. AngularJS 使用$sce控制代码安全检查
  2. Screenlets:桌面小玩意
  3. 几个.Net开源的CMS系统 (转)
  4. css元素捕捉,css元素选择器
  5. vscode设置默认新建html,VScode修改默认生成的HTML模板的方法
  6. 学会python能找工作吗-Python学到什么程度才可以去找工作?掌握这4点足够了!...
  7. python详细安装教程linux-在Linux上安装Python3
  8. 在哪里能收到python实例代码-用python做一个搜索引擎(Pylucene)的实例代码
  9. 不是python中用于开发用户界面的第三方库-模拟试卷C
  10. 用python的turtle画圆-怎么用python画圆