2019独角兽企业重金招聘Python工程师标准>>>

spring的启动过程

  1. 首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境;

  2. 其次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文被称为根上下文,即WebApplicationContext,这是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的context-param标签指定。在这个IoC容器初始化完毕后,spring以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取;

  3. 再次,contextLoaderListener监听器初始化完毕后,开始初始化web.xml中配置的Servlet,这个servlet可以配置多个,以最常见的DispatcherServlet为例,这个servlet实际上是一个标准的前端控制器,用以转发、匹配、处理每个servlet请求。DispatcherServlet上下文在初始化的时候会建立自己的IoC上下文,用以持有spring mvc相关的bean。在建立DispatcherServlet自己的IoC上下文时,会利用

WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE先从ServletContext中获取之前的根上下文(即WebApplicationContext)作为自己上下文的parent上下文。有了这个parent上下文之后,再初始化自己持有的上下文。这个DispatcherServlet初始化自己上下文的工作在其initStrategies方法中可以看到,大概的工作就是初始化处理器映射、视图解析等。这个servlet自己持有的上下文默认实现类也是mlWebApplicationContext。初始化完毕后,spring以与servlet的名字相关(此处不是简单的以servlet名为Key,而是通过一些转换,具体可自行查看源码)的属性为属性Key,也将其存到ServletContext中,以便后续使用。这样每个servlet就持有自己的上下文,即拥有自己独立的bean空间,同时各个servlet共享相同的bean,即根上下文(第2步中初始化的上下文)定义的那些bean。

由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener  >> fileter  >> servlet

如:配置

<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

在applicationContext.xml中我们有时会使用扫描包的功能, 来装配Bean。但是注意此处装配的Bean要是业务逻辑层的Bean。即不是@Controller的

<context:component-scan base-package="com.bb.bbtest.service />

XX-servelt.xml  该文件配置@Controller、页面解析器,与Web相关的一些功能等。

转载于:https://my.oschina.net/ouyangtaohong/blog/795068

Spring MVC 启动相关推荐

  1. Spring mvc 启动配置文件加载两遍问题

    问题描述 在使用spring mvc 启动的时候,用到了一个在程序启动时加载的配置方法init-method="initLoad",并启动多线程来做数据同步,但是在程序启动之后发现 ...

  2. 详述 Spring MVC 启动流程及相关源码分析

    文章目录 Web 应用部署初始化过程(Web Application Deployement) Spring MVC 启动过程 Listener 的初始化过程 Filter 的初始化 Servlet ...

  3. spring mvc DispatcherServlet详解之前传---FrameworkServlet

    做项目时碰到Controller不能使用aop进行拦截,从网上搜索得知:使用spring mvc 启动了两个context:applicationContext 和WebapplicationCont ...

  4. Spring Boot Spring MVC异常处理原理分析

    一.Spring MVC为处理异常的前期准备 DispatcherServlet 入口类,是一个Servlet,是所有请求的分发点 初始化 DispatcherServlet在初始化时会触发onRef ...

  5. Spring MVC 流程图解析

    Spring MVC 流程图解析 Spring MVC工作流程图 图一 图二  SpringMVC工作流程描述 DispatcherServlet,HandlerMapping,HandlerExec ...

  6. tomcat + spring mvc原理(二):tomcat容器初始化加载和启动

    tomcat + spring mvc原理(二):tomcat容器动态加载 容器通用生命周期标准 容器通用生命周期的实现 生命周期状态监听器的管理实现 生命周期方法实现 宏观来看各种容器生命周期的实际 ...

  7. Spring MVC 4

    Spring MVC 4 项目文件结构 pom.xml依赖 <properties><endorsed.dir>${project.build.directory}/endor ...

  8. Spring MVC配置文件的三个常用配置详解

    2019独角兽企业重金招聘Python工程师标准>>> Spring MVC项目中通常会有二个配置文件,sprng-servlet.xml和applicationContext.xm ...

  9. Spring MVC常用注解说明

    2019独角兽企业重金招聘Python工程师标准>>>     使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02     之前在使用Struts2实现MV ...

最新文章

  1. [云炬python3玩转机器学习笔记] 2-7开发环境搭建笔记
  2. HarmonyOS之深入解析线程管理
  3. 三元表达式,列表解析和生成器表达式
  4. les物流执行系统_【精益运营】立足智慧物流 推进仓储智能化稳步升级
  5. OSM数据的获取及格式转换
  6. sql server与oracle的分页,详解SQLServer和Oracle的分页查询
  7. 总结一下安装linux系统经验-版本选择-安装ubuntu
  8. Android动态生成答题卡,好分数怎样制作答题卡
  9. android平板生产力工具,重塑应用生态,让安卓平板成为生产力工具:华为MatePad Pro体验...
  10. fms5序列号_火枫 FMS-105分体式炉头测评
  11. 招行权证割肉比赛开演 10个交易日后寿终正寝
  12. codeforces 869 E. The Untended Antiquity(树状数组)
  13. 火车头采集器文章翻译插件(文章标题内容中英双语对照|自动插入相关图片)
  14. ProjectEuler Problem1.Multiples of 3 and 5
  15. 游戏美术职业解读:原画,3D建模,3D动作,次世代
  16. caffe-ssd细节梳理
  17. Python - 在for循环体内修改i值
  18. Nginx 配置 SSL 证书 + HTTPS 站点小记
  19. Xilinx MicroBlaze软核的使用-Uartlite
  20. 2022自学考试报名时间、报名条件是什么?

热门文章

  1. 六类网线和超六类网线有什么区别呢 怎么区分
  2. 教你玩4款最新族视频摄像头
  3. 猛然发现,已经第100篇随笔了
  4. Could not resolve all dependencies for configuration ':app:_debugApk'
  5. KindEditor使用过程中,用JQ提交表单时,获取不到编辑器的内容
  6. Linux 配置yum本地安装源
  7. Maven集成指令总结
  8. 软件工程概论———登录界面的设计
  9. bookStore第二篇【图书模块、前台页面】
  10. MVC3 Razor 视图引擎的基础语法