Spring MVC 启动
2019独角兽企业重金招聘Python工程师标准>>>
spring的启动过程
首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境;
其次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文被称为根上下文,即WebApplicationContext,这是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的context-param标签指定。在这个IoC容器初始化完毕后,spring以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取;
再次,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 启动相关推荐
- Spring mvc 启动配置文件加载两遍问题
问题描述 在使用spring mvc 启动的时候,用到了一个在程序启动时加载的配置方法init-method="initLoad",并启动多线程来做数据同步,但是在程序启动之后发现 ...
- 详述 Spring MVC 启动流程及相关源码分析
文章目录 Web 应用部署初始化过程(Web Application Deployement) Spring MVC 启动过程 Listener 的初始化过程 Filter 的初始化 Servlet ...
- spring mvc DispatcherServlet详解之前传---FrameworkServlet
做项目时碰到Controller不能使用aop进行拦截,从网上搜索得知:使用spring mvc 启动了两个context:applicationContext 和WebapplicationCont ...
- Spring Boot Spring MVC异常处理原理分析
一.Spring MVC为处理异常的前期准备 DispatcherServlet 入口类,是一个Servlet,是所有请求的分发点 初始化 DispatcherServlet在初始化时会触发onRef ...
- Spring MVC 流程图解析
Spring MVC 流程图解析 Spring MVC工作流程图 图一 图二 SpringMVC工作流程描述 DispatcherServlet,HandlerMapping,HandlerExec ...
- tomcat + spring mvc原理(二):tomcat容器初始化加载和启动
tomcat + spring mvc原理(二):tomcat容器动态加载 容器通用生命周期标准 容器通用生命周期的实现 生命周期状态监听器的管理实现 生命周期方法实现 宏观来看各种容器生命周期的实际 ...
- Spring MVC 4
Spring MVC 4 项目文件结构 pom.xml依赖 <properties><endorsed.dir>${project.build.directory}/endor ...
- Spring MVC配置文件的三个常用配置详解
2019独角兽企业重金招聘Python工程师标准>>> Spring MVC项目中通常会有二个配置文件,sprng-servlet.xml和applicationContext.xm ...
- Spring MVC常用注解说明
2019独角兽企业重金招聘Python工程师标准>>> 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02 之前在使用Struts2实现MV ...
最新文章
- [云炬python3玩转机器学习笔记] 2-7开发环境搭建笔记
- HarmonyOS之深入解析线程管理
- 三元表达式,列表解析和生成器表达式
- les物流执行系统_【精益运营】立足智慧物流 推进仓储智能化稳步升级
- OSM数据的获取及格式转换
- sql server与oracle的分页,详解SQLServer和Oracle的分页查询
- 总结一下安装linux系统经验-版本选择-安装ubuntu
- Android动态生成答题卡,好分数怎样制作答题卡
- android平板生产力工具,重塑应用生态,让安卓平板成为生产力工具:华为MatePad Pro体验...
- fms5序列号_火枫 FMS-105分体式炉头测评
- 招行权证割肉比赛开演 10个交易日后寿终正寝
- codeforces 869 E. The Untended Antiquity(树状数组)
- 火车头采集器文章翻译插件(文章标题内容中英双语对照|自动插入相关图片)
- ProjectEuler Problem1.Multiples of 3 and 5
- 游戏美术职业解读:原画,3D建模,3D动作,次世代
- caffe-ssd细节梳理
- Python - 在for循环体内修改i值
- Nginx 配置 SSL 证书 + HTTPS 站点小记
- Xilinx MicroBlaze软核的使用-Uartlite
- 2022自学考试报名时间、报名条件是什么?