spring项目的启动过程

下边利用tomcat启动spring项目来看看启动过程中发生了什么:

项目启动过程比较长,本想着粘到编辑器中做解析,无奈字数超限,于是转为图片,结果超出长度,不得已做了二次截图才上传成功,项目启动的主要行为大概都截到了,可以参考一下。

总结一下tomcat启动加载顺序:

1.启动tomcat容器catalina,catalina 就是Tomcat服务器使用的 Apache实现的servlet容器的名字

2.容器监听日志打印出当前运行系统环境的tomcat版本号,系统名称以及其他的硬件版本号,以及JDK所在的位置,以及JVM虚拟机的版本号。

3.初始化高并发的APR模式后,随即就会指定tomcat运行的端口号,同时指定ajp-apr的端口号(AJP13是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。),这也是tomcat快要启动起来后看到的端口号。

4.初始化完相应参数后,Catalina服务才算开始正式启动;

5.开始运行tomcat内部核心的标准引擎

6.开始运行Servlet引擎;

7.在容器中初始化log4j;以上可以认为是tomcat在正式工作前开始做的预备工作,发现没有错误后,就可以正式初始化spring容器了,为项目运行做最终准备。

8.开始初始化Spring root

9.优先搜索最基础的配置文件并添加到StandardServletEnvironment中去,如servletConfigInitParams,servletContextInitParams,jndiProperties,systemProperties,systemEnvironment

10.完成添加会打印Initialized StandardServletEnvironment with PropertySources [servletConfigInitParams,servletContextInitParams,jndiProperties,systemProperties,systemEnvironment]

11.由于项目中配置的有servlet,所以tomcat检测到后替换了默认的servlet配置,并刷新了根目录的层级关系。

12.加载系统配置,应该是JDK;初始化完成后会打印出Initialized StandardEnvironment with PropertySources [systemProperties,systemEnvironment]

13.根据web.xml定义的规则查询并加载spring配置,接着加载配置文件中xsd文件并使用编程接口解释器JAXP解析;

14.开始加载Bean

15.加载标签,如 aop - AopNamespaceHandler

c - SimpleConstructorNamespaceHandler

cache - CacheNamespaceHandler

context - ContextNamespaceHandler

jdbc - JdbcNamespaceHandler

jee - JeeNamespaceHandler

jms - JmsNamespaceHandler

lang - LangNamespaceHandler

mvc - MvcNamespaceHandler

oxm - OxmNamespaceHandler

p - SimplePropertyNamespaceHandler

task - TaskNamespaceHandler

tx - TxNamespaceHandler

util - UtilNamespaceHandler

16.解析之前加载到内存applicationContext文件中定义的bean

17.扫描mapper文件,寻找与MySQL配置相匹配的properties文件。

18.spring开始实例化bean,加载Class文件

19.为实现类的目标文件创建动态代理

20.初始化字符过滤器

21.启动成功

关于项目中涉及到的大部分主要关键点,都作了记录。至于英文启动环境及句柄的含义,有心可以对照网上查阅,这里不便展开来说。

 

总结一下springMVC请求流程:

DispatcherServlet是一个分发器,控制着整个springMVC的流程有序。

①:DispatcherServlet是springmvc中的前端控制器(front controller),负责接收request并将request转发给对应的处理组件.

②:HanlerMapping是springmvc中完成url到controller映射的组件.DispatcherServlet接收request,然后从HandlerMapping查找处理request的controller.

③:Cntroller处理request,并返回ModelAndView对象,Controller是springmvc中负责处理request的组件(类似于struts2中的Action),ModelAndView是封装结果视图的组件.

④ ⑤ ⑥:视图解析器解析ModelAndView对象并返回对应的视图给客户端.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章