Spring5MVC——启动过程,执行refresh方法的入口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring5MVC——启动过程,执行refresh方法的入口相关的知识,希望对你有一定的参考价值。

参考技术A 在容器初始化时会建立所有url和controller的对应关系,保存到Map<url,controller>中。tomcat启动时会通知spring初始化容器(加载bean的定义信息和初始化所有单例bean),然后springmvc会遍历容器中的bean,获取每一个controller中的所有方法访问的url,然后将url和Controller保存到一个Map中。

这样就可以根据request快速定位到Controller,因为最终处理request的是Controller中的方法,Map中只保留了url和Controller中的对应关系,所以要根据request的url进一步确认Controller中的method,这一步工作的原理就是拼接Controller的url(Controller上@RequestMapping的值)和方法的url(method上@RequestMapping的值),与request的url进行匹配,找到匹配的那个方法。

确定处理请求的method后,接下来的任务就是参数绑定,把request中参数绑定到方法的形式参数上,这一步是整个请求处理过程中最复杂的一个步骤。SpringMVC提供了两种request参数与方法形参的绑定方法:
* ① 通过注解进行绑定 @RequestParam
* ② 通过参数名称进行绑定

使用注解进行绑定,我们只要在方法参数前面声明@RequestParam("a"),就可以将request中参数a的值绑定到方法的该参数上。使用参数名称进行绑定的前提是必须要获取方法中参数的名称,Java反射只提供了获取方法的参数的类型,并没有提供获取参数名称的方法。SpringMVC解决这个问题的方法是用asm框架读取字节码文件,来获取方法的参数名称。asm框架是一个字节码操作框架,关于asm更多介绍可以参考它的官网。个人建议,使用注解来完成参数绑定,这样就可以省去asm框架的读取字节码的操作。

这意味着注解配置方式的初始化会先于web.xml配置方式的初始化执行,并且在执行到这里的时候,Spring里面相关的Root容器、子容器和DispatcherServlet实例都已经被创建好了。

HttpServlet是Servlet规范中的核心类,实现Servlet接口,继承此类用于处理用户请求

HttpServletBean主要配置servlet中初始化参数。继承HttpServlet,并实现无参的init()方法,用于设置在web.xml中配置的contextConfigLocation属性,此属性指定Spring MVC的配置文件地址,默认为WEB-INF/[servlet-name]-servlet.xml。

HttpServletBean的作用:

FrameworkServlet主要创建WebApplicationContext上下文,重写了HttpServletBean的initServletBean()方法。

如果没有WebApplicationContext则创建

总结FrameworkServlet的作用:

DispatcherServlet是Spring MVC核心,它是J2EE规范前端控制器的实现,负责拦截用户请求,并解析请求进行转发。

总结:

参考:
https://www.cnblogs.com/yoci/p/10642493.html

https://www.cnblogs.com/fangjian0423/p/springMVC-directory-summary.html

https://segmentfault.com/a/1190000014674239

https://blog.csdn.net/win7system/article/details/90674757

https://www.cnblogs.com/liwangcai/p/10743943.html

https://www.cnblogs.com/myitnews/p/11565941.html

javaEE项目启动过程中Spring是怎么一步步执行的?

你这个问题问的不清楚,如果是和其他框架整合,运行过程如下。Spring+struts
1,tomcat启动,创建容器。web.xml是服务器最先调用的文件。
2,然后加载WEB-INF下的web.xml初始化里面内容,
3,spring配置文件初始化,主要是ioc反转控制,和aop切面。spring注入是面向接口编程。
3,因为web.xml初始化了,说明struts过滤器也被创建,下面就可以拦截请求了。
4,页面请求发出,被status拦截送到action,action里面有spring注入接口。可以直接调用方法不需要new 对象。再然后就是业务处理。
下面这是个springMVC单独使用。不用注解的情况下。
与servlet处理请求方式差不多,
参考技术A Spring就是起一个桥梁的作用,简单说下流程吧,就是表示层:页面中发送请求————spring注解,给struts————Struts调用底层代码获得数据后返回数据————spring接受————返回给表示层 在整个流程中数据都存在spring中

以上是关于Spring5MVC——启动过程,执行refresh方法的入口的主要内容,如果未能解决你的问题,请参考以下文章

javaEE项目启动过程中Spring是怎么一步步执行的?

Spring Boot 中的动态数据库属性更改

SpringBoot 启动过程执行某函数

Nova启动虚拟机执行过程

windows启动过程

IOC启动过程