spring项目的启动过程

    技术2022-08-06  78

    下边利用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对象并返回对应的视图给客户端.

    Processed: 0.014, SQL: 9