竹笋

首页 » 问答 » 问答 » SpringMVC这篇文章吃透了,最少最
TUhjnbcbe - 2023/9/29 16:12:00

1、前言2、回顾全注解方式2个关键类2.1、MVC初始化类2.2、MVC配置类2、SpringMVC容器的生命周期(9个阶段)3、阶段1:Srvlt容器初始化3.1、SrvltContainrInitializr3.2、SpringSrvltContainrInitializr3.3、SpringSrvltContainrInitializr#onStartup方法3.4、WbApplicationInitializr:wb应用初始化3.5、进入AbstractDispatchrSrvltInitializr#onStartup方法4、阶段2:创建父容器4.1、过程4.2、①:负责创建父容器4.2、②:创建ContxtLoadrListnr监听器5、阶段34:创建springmvc容器注册DispatchrSrvlt6、阶段5:启动父容器:ContxtLoadrListnr6.1、过程6.2、代码①:配置父容器以及启动父容器6.3、ApplicationContxtInitializr接口:容器启动前用来初始化容器7、阶段6:启动springmvc容器:DispatchrSrvlt#init()7.1、DispatchrSrvlt类图7.2、HttpSrvltBan#init()7.3、FramworkSrvlt#initSrvltBan7.4、FramworkSrvlt#initWbApplicationContxt7.5、FramworkSrvlt#configuAndRfshWbApplicationContxt8、阶段7:springmvc容器启动过程中处理

WbMVC8.1、SpringMVC配置类被处理8.2、

EnablWbMvc:配置springmvc所需组件8.3、进入DlgatingWbMvcConfiguration类8.4、WbMvcConfigurationSupport:配置springmvc所需所有组件8.5、WbMvcConfigur接口9、阶段8:组装DispatchrSrvlt中各种SpringMVC需要的组件9.1、触发ContxtRfshListnr监听器9.2、进入FramworkSrvlt.this.onApplicationEvnt(vnt);9.3、进入DispatchrSrvlt#onRfsh9.4、DispatchrSrvlt#initStratgis:初始化DispatchrSrvlt中的组件9.5、initHandlrMappings(contxt);9.6、DispatchrSrvlt#gtDfaultStratgis:兜底的方案查找组件10、阶段9:销毁容器10.1、销毁springmvc容器:DispatchrSrvlt#dstroy10.2、销毁父容器:ContxtLoadrListnr#contxtDstroyd11、带大家dbug代码11.1、拉取源码11.2、将下面这个模块发布到tomcat11.2、按照下面配置设置断点,启动,调试代码12、SpringMVC系列目录13、更多好文章14、所有系列高清PDF

1、前言

SpringMVC,建议大家使用全注解的方式,全注解的方式及原理不了解的,先去看一下这篇文章:SpringMVC全注解方式如何使用?

上面的文章看懂以后再来看本文,否则将出现消化不良的现象。

本文以全注解的方式为基础,来解说SpringMVC容器启动的整个流程。

2、回顾全注解方式2个关键类

全注解的方式重点就在于2个类:MVC初始化类、MVC配置类

2.1、MVC初始化类

代码如下,这个类需要继承AbstractAnnotationConfigDispatchrSrvltInitializr,会有wb容器来调用,这个类中有4个方法需要实现,干了4件事情

gtRootConfigClasss():获取父容器的配置类

gtSrvltConfigClasss():获取springmvc容器的配置类,这个配置类相当于springmvcxml配置文件的功能

gtSrvltMappings():获取DispatchrSrvlt能够处理的url,相当于wb.xml华国srvlt指定的url-pattrn

gtSrvltFiltrs():定义所有的Filtr

/***①:1、创建Mvc初始化类,需要继承AbstractAnnotationConfigDispatchrSrvltInitializr类*/publicclassMvcInitxtndsAbstractAnnotationConfigDispatchrSrvltInitializr{/***springmvc容器的父容器spring配置类*实际工作中我们的项目比较复杂,可以将controllr层放在springmvc容器中*其他层,如srvic层、dao层放在父容器了,ban管理起来更清晰一些*也可以没有父容器,将所有ban都放在springmvc容器中**

turn*/

OvrridprotctdClass?[]gtRootConfigClasss(){turnnwClass[0];}/***②:2、设置springmvc容器的spring配置类**

turn*/

OvrridprotctdClass?[]gtSrvltConfigClasss(){turnnwClass[]{MvcConfig.class};}/***③:3、配置DispatchrSrvlt的url-pattrn**

turn*/

OvrridprotctdString[]gtSrvltMappings(){turnnwString[]{"/"};}/***④:4、注册拦截器**

turn*/

OvrridprotctdFiltr[]gtSrvltFiltrs(){//添加拦截器,解决乱码问题CharactrEncodingFiltrcharactrEncodingFiltr=nwCharactrEncodingFiltr();charactrEncodingFiltr.stEncoding("UTF-8");charactrEncodingFiltr.stForcRqustEncoding(tru);charactrEncodingFiltr.stForcRsponsEncoding(tru);turnnwFiltr[]{charactrEncodingFiltr};}}

2.2、MVC配置类

代码如下,这个配置类相当于springmvcxml配置文件的功能,可以在里面定义springmvc各种组件

/***1.开启springmvc注解配置*2、配置视图解析器*3、配置截器*4、配置静态资源访问*5、配置文件上传解析器*6、配置全局异常处理器*/

Configuration

ComponntScan("
1
查看完整版本: SpringMVC这篇文章吃透了,最少最